如果模板中存在成员,如何获取成员函数指针

问题描述 投票:1回答:1

要获取类成员函数指针,我们执行以下操作:

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”应事先知道。 ...

c++ metaprogramming member-function-pointers
1个回答
0
投票

使用std::experimental::is_detected,您可以这样做:

© www.soinside.com 2019 - 2024. All rights reserved.