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

Using struct as wrapper for member function

我正在尝试使用结构作为 class 的成员函数的包装器。我有一个模板化结构,它应该包含一个指向成员函数的指针,但在一般意义上不指向实例的特定函数。我已经弄清楚了模板规范,但还没有弄清楚函数存储的语法。

更清楚:我有 class X 具有非静态函数 doY()doZ()。在我创建的 class class A 中,我有一个名为 exX 实例。根据情况我想调用其中一个函数。我制作了一个名为 wrapper 的结构。 Wrapper 应使用模板特化将对 doY()doZ() 的引用存储在名为 function 的静态变量中。然后我应该可以调用 ex.wrapper::function 到 运行 ex.doY()ex.doZ().

这是我的代码的当前版本(显示了一些 class B 的专业化),这导致 func is not a member of wrapper 错误

.h

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

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

.cpp

template <>
struct A<B>::wrapper<B>
{
    // V-- this is where I am having issues --V
    static const X::(func)(int, int, char) = &X::doY
}

谢谢 molbdnilo,语法编译正确。

The pointer-to-member declaration syntax is return_type (class_name::variable_name)(parameter_types). The pointer-to-member dereferencing operators are . and ->*

从那时起,我还找到了一个同样有效的替代语法:

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;