我怎样才能做到这一点?目前出现以下编译错误
error: member pointer refers into non-class type 'Test *'
6 | if constexpr (std::is_same<MethodT, void (ObjectT::*)(int)>::value)
#include <type_traits>
template<typename MethodT, typename ObjectT>
void RegisterCallback(MethodT method, ObjectT object)
{
if constexpr (std::is_same<MethodT, void (ObjectT::*)(int)>::value)
{
// do something
}
if constexpr (std::is_same<MethodT, void (ObjectT::*)(int, float)>::value)
{
// do something else
}
}
int main()
{
struct Test
{
void HandleCallbackWithInt(int)
{}
void HandleCallbackWithIntFloat(int, float)
{}
} receiver;
RegisterCallback(&Test::HandleCallbackWithInt, &receiver);
return 0;
}
当您将
&receiver
传递给 ObjectT object
时,ObjectT
会被推导为 Test*
,并且 ObjectT::*
对于指针类型 ObjectT
无效。你可能想要
template<typename MethodT, typename ObjectT>
void RegisterCallback(MethodT method, ObjectT* object)
// ------------------------------------------^
和
ObjectT
将被推导为 Test
。