传递指向模板类的模板成员的指针

时间:2021-03-12 11:01:29

标签: c++ oop

我正在寻找一种方法来获得模板类的函数,该函数接受模板的成员(它可以是其参数或函数之一)作为参数。

模型.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> 等类型一起使用,而只能与其他类一起使用。

2 个答案:

答案 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
}