我正在寻找一种方法来获得模板类的函数,该函数接受模板的成员(它可以是其参数或函数之一)作为参数。
模型.h
template <class T>
class Model
{
public:
Model(){}
void relate(int T::*, int ){}
};
main.cpp
#include "model.h"
class element
{
public:
element();
char getA(){return this->a;}
int getB(){return this->b;}
char a;
int b;
};
int main(int argc, char *argv[]){
Model<element *> model;
return 0;
}
它给出了 creating pointer to member of non-class type ‘element*’
错误。
我同意这一点,因为指针必须指向某个已定义类型的内存区域。
我的最终目标是告诉我的班级,我想将其模板的特定成员与某个数字相关联,稍后将使用该数字对列表中的不同成员进行排序,稍后将显示该列表。
这不会与 Model<int>
等类型一起使用,而只能与其他类一起使用。
答案 0 :(得分:1)
您实例化一个 Model<element*>
因此:
void relate(int T::*, int ){}
是(只是假设):
void relate(int element*::*, int) {}
它是“指向指针类型成员的指针”。如果您实例化 Model<element>
,您的代码工作正常。或者,您可以使用 std::remove_pointer<T>
。
答案 1 :(得分:0)
编辑: 突然我想通了...我用了一个poiter作为模板...
但现在游戏改变了...
int main(int argc, char *argv[]){
Model<element> model;
element e;
model.relate(&element::getA(), 0); // <- call to non static-member error
model.relate(&element::getB(), 0); // <- call to non static-member error
model.relate(&element::a, 0); // <- type mismatch error
model.relate(&element::b, 0); // <- no error
}