类成员的模板参数

时间:2012-07-17 23:11:09

标签: c++ templates

使用模板是否可以这样?

template<class T, int T::M>
int getValue (T const & obj) {
    return obj.M;
}

class NotPlainOldDataType {
public:
    ~NotPlainOldDataType () {}
    int x;
}

int main (int argc, char ** argv) {
    typedef NotPlainOldDataType NPOD;
    NPOD obj;

    int x = getValue<NPOD, NPOD::x>(obj);

    return x;
}

我已经知道如何使用宏

#define GET_VALUE(obj, mem) obj.mem

class NotPlainOldDataType {
public:
    ~NotPlainOldDataType () {}
    int x;
}

int main (int argc, char ** argv) {
    NotPlainOldDataType obj;

    int x = GET_VALUE(obj, x);

    return x;
}

1 个答案:

答案 0 :(得分:7)

如果我理解你的意图,那么以下内容应该有效:

#include <iostream>

template<typename T, int (T::*M)>
int getValue(T const& obj)
{
    return obj.*M;
}

class NotPlainOldDataType
{
public:
    explicit NotPlainOldDataType(int xx) : x(xx) { }
    ~NotPlainOldDataType() { }
    int x;
};

int main()
{
    typedef NotPlainOldDataType NPOD;

    NPOD obj(3);
    std::cout << getValue<NPOD, &NPOD::x>(obj) << '\n';
}

<子> Online demo