成员变量的C ++ typename

时间:2010-03-19 01:04:05

标签: c++ variables member typename

是否可以获取成员变量的typename?例如:

struct C { int value ; };

typedef typeof(C::value) type; // something like that?

由于

4 个答案:

答案 0 :(得分:5)

不在C ++ 03中。 C ++ 0x引入了decltype

typedef decltype(C::value) type;

但有些编译器的扩展名为typeof

typedef typeof(C::value) type; // gcc

如果你对Boost感到满意,他们会有library

typedef BOOST_TYPEOF(C::value) type;

答案 1 :(得分:4)

只有在处理函数中的类型时才可以

struct C { int value ; };

template<typename T, typename C>
void process(T C::*) {
  /* T is int */
}

int main() {
  process(&C::value); 
}

它不适用于参考数据成员。 C ++ 0x将允许decltype(C::value)更容易地做到这一点。不仅如此,它还允许decltype(C::value + 5)以及decltype内的任何其他精彩表达内容。 Gcc4.5已经支持它。

答案 2 :(得分:1)

可能不是您正在寻找的,但从长远来看可能是更好的解决方案:

struct C {
  typedef int type;
  type value;
};

// now we can access the type of C::value as C::type
typedef C::type type;

这不完全是您想要的,但它确实允许我们隐藏C::value的实现类型,以便我们以后可以更改它,这是我怀疑您所追求的。

答案 3 :(得分:0)

这取决于你需要做什么,但你会做类似的事情:

#include <iostream>
using namespace std;

struct C
{
    typedef int VType;
    VType value;
};

int main()
{
    C::VType a = 3;
    cout << a << endl;
}