要获取类成员函数指针,我们执行以下操作:
return_type (Class::*varName)(paramType1, paramTypeN) = &Class::functionName;
“ functionName”应该是事先知道的。
事实是,我不(实际上不应该)在乎函数名,有没有一种方法,我可以检查“成员函数指针”的存在,如果它不为null,我称之为。 >
我想在我的模板类中做到这一点。
如果模板参数对象具有成员函数,该成员函数与我期望的签名匹配,则我将该函数称为。
该代码不是有效的C ++代码,但是它会提示您我正在寻找什么。
template< typename T > class MyTemplateClass { void myFunction(T& object) { if constexpr( exists_in_class< T, void (T::*)(const int&, const int&) >::value ) { call_member_function_pointer< T, void (T::*)(const int&, const int&) >( object, 1, 2 ); } } };
如果不可能,因为您可能有许多功能具有不同的名称,但具有相同的准确签名(原型)。是否有可能找到一种传递函数名称的方法,如下所示:
template< typename T >
class MyTemplateClass {
void myFunction(T& object) {
if constexpr( exists_in_class< T, void (T::*)(const int&, const int&), FunctionNameIExpect >::value ) {
call_member_function_pointer<
T,
void (T::*)(const int&, const int&),
FunctionNameIExpect >( object, 1, 2 );
}
}
};
要获取类成员函数指针,我们执行以下操作:return_type(Class :: * varName)(paramType1,paramTypeN)=&Class :: functionName; “ functionName”应事先知道。 ...
使用std::experimental::is_detected,您可以这样做: