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

C++ 使用struct作为成员函数的包装器,c++,templates,struct,function-pointers,template-specialization,C++,Templates,Struct,Function Pointers,Template Specialization,我试图使用结构作为类的成员函数的包装器。我有一个模板结构,它应该包含一个指向成员函数的指针,但在一般意义上不指向实例的特定函数。我已经弄清楚了模板的具体化,但是还没有弄清楚函数存储的语法 更清楚地说:我有一个类X,它具有非静态函数doY()和doZ()。在我创建的类中,classA,我有一个名为ex的X实例。根据具体情况,我想调用其中一个函数。我制作了一个名为包装器的结构Wrapper应该使用模板规范在名为function的静态变量中存储对doY()或doZ()的引用。然后我应该能够调用ex.w

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

更清楚地说:我有一个类
X
,它具有非静态函数
doY()
doZ()
。在我创建的类中,class
A
,我有一个名为
ex
X
实例。根据具体情况,我想调用其中一个函数。我制作了一个名为
包装器
的结构
Wrapper
应该使用模板规范在名为
function
的静态变量中存储对
doY()
doZ()
的引用。然后我应该能够调用
ex.wrapper::function
来运行
ex.doY()
ex.doZ()

这是我的代码的当前版本(显示某些类B的专门化),这会导致
func不是包装器的成员
错误

h

模板
甲级
{
T定时器;
X ex;
模板
结构create_timer_getter{};
无效剂量测定法()
{
timer=ex.wrapper::func();
}
};
.cpp

模板
结构A::包装器
{
//这就是我的问题所在
静态常量X::(func)(int,int,char)=&X::doY
}

谢谢molbdnilo,语法编译正确


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

从那时起,我还发现了另一种同样有效的语法:

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;

使用
std::function
有什么不对?它仍然只会给我一个
函数不是包装器的成员
error您在描述中使用了
X
a
doY
doZ
,然后您就可以在不使用这些名称的地方编写代码了。您将“XYZ”和“ABC”混合在完全不同的类别中(X和A是类,Y和Z是函数?)。您的示例代码是一个具有专门化和更多模板的模板,其中似乎没有一个与您的“更清晰”描述明确对应;您的“更清晰”不涉及模板。我认为你的问题很简单,但你的问题太让人困惑了,我再也不确定天是否蓝了。您的代码中有
。指向成员声明语法的指针是
返回类型(类名称::*变量名称)(参数类型)
。指向成员取消引用运算符的指针是
*
->*
。仍然不是一个完整的示例。当我将这段代码复制到一个文件并编译它时,我得到了“错误:'X'没有命名类型”和“错误:'B'没有在此范围内声明”以及其他几个错误,这些错误都与问题中提到的错误不匹配。
template <>
struct A<B>::wrapper<B>
{
    // V-- this is where I am having issues --V
    static const X::(func)(int, int, char) = &X::doY
}
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;