使用struct作为成员函数的包装器

时间:2019-05-02 17:51:25

标签: c++ templates struct function-pointers template-specialization

我试图将结构用作类的成员函数的包装器。我有一个模板化的结构,该结构应该保存一个指向成员函数的指针,但是从一般意义上讲,它并不指向实例的特定函数。我已经弄清楚了模板规范化,但是还不能弄清楚该函数存储的语法。

更清楚:我有X类,该类具有非静态功能doY()doZ()。在我创建的类A中,我有一个名为X的{​​{1}}实例。根据情况,我想调用其中一个功能。我制作了一个名为ex的结构。 wrapper应该使用模板规范化在名为Wrapper的静态变量中存储对doY()doZ()的引用。然后,我应该可以呼叫function来运行ex.wrapper::functionex.doY()

这是我代码的当前版本(显示某些B类的专业化知识),这会导致ex.doZ()错误

.h

func is not a member of wrapper

.cpp

template <class T>
class A
{
    T timer;
    X ex;
    template<class Type>
    struct create_timer_getter{};

    void doSomething()
    {
        timer = ex.wrapper<T>::func();
    }
};

1 个答案:

答案 0 :(得分:0)

谢谢molbdnilo,该语法已正确编译。

  

成员声明指针的语法为return_type(class_name :: variable_name)(parameter_types)。指向成员的指针取消引用运算符是。和-> *

从那时起,我还发现了另一种可行的语法:

typedef return_type (class_name::user_defined_type_name)(parameter_types);
user_defined_type_name variable_name = &namespace(if needed)::class_name::member_function_name;