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()
。在我创建的类中,classA
,我有一个名为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;