成员变量的C++类型名

问题描述 投票:0回答:4

是否可以获取成员变量的类型名?例如:

struct C { int value ; };

typedef typeof(C::value) type; // something like that?
c++ variables member typename
4个回答
9
投票

C++03 中没有。 C++0x 引入

decltype
:

typedef decltype(C::value) type;

一些编译器有一个

typeof
扩展,但是:

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

如果您对 Boost 没意见,他们有一个

typedef BOOST_TYPEOF(C::value) type;

5
投票

仅当您擅长处理函数中的类型时

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已经支持了。


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
的实现类型,以便我们稍后可以更改它,这就是我怀疑您想要的。


0
投票

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

#include <iostream>
using namespace std;

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

int main()
{
    C::VType a = 3;
    cout << a << endl;
}
© www.soinside.com 2019 - 2024. All rights reserved.