我有以下課程,我在上面運行 clang-tidy。
template<typename Foo>
class Bar
{
public:
template<class THandlerObj>
Bar(void (THandlerObj::*pCmdHandler)(const Foo&),
THandlerObj* pCmdHandlerContext)
: m_cmdHandlerFunc(std::bind(pCmdHandler, pCmdHandlerContext, std::placeholders::_1))
{
}
private:
std::function<void(const Foo&)> m_cmdHandlerFunc;
}
Clang 告訴我應該使用 lambda 函式而不是 std::bind。但是我無法直接理解語法。我正在努力解決一個成員函式應該在背景關系中呼叫的事實,但我不知道如何做到這一點。
uj5u.com熱心網友回復:
您可以使用 lambda 的捕獲串列來捕獲成員函式指標和物件指標,并在 lambda 內部呼叫它們。嘗試這個:
#include <functional>
template<typename Foo>
class Bar
{
public:
template<class THandlerObj>
Bar(void (THandlerObj::*pCmdHandler)(const Foo&),
THandlerObj* pCmdHandlerContext)
: m_cmdHandlerFunc(
[=](const Foo& foo) { (pCmdHandlerContext->*pCmdHandler)(foo); })
{
}
private:
std::function<void(const Foo&)> m_cmdHandlerFunc;
};
如果您的編譯器支持 C 20,您還可以使用std::bind_front比std::bind.
template<class THandlerObj>
Bar(void (THandlerObj::*pCmdHandler)(const Foo&),
THandlerObj* pCmdHandlerContext)
: m_cmdHandlerFunc(std::bind_front(pCmdHandler, pCmdHandlerContext))
{
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325447.html
上一篇:GMockstd::any引數
