是否可以获得成员变量的类型名?例如:
struct C { int value ; };
typedef typeof(C::value) type; // something like that?
谢谢
不在 C++03 中。C++0x 介绍decltype
:
typedef decltype(C::value) type;
不过,一些编译器有一个typeof
扩展:
typedef typeof(C::value) type; // gcc
如果你对 Boost 没问题,他们有一个库:
typedef BOOST_TYPEOF(C::value) type;
仅当您可以处理函数中的类型时
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 已经支持了。
可能不是您正在寻找的东西,但从长远来看可能是更好的解决方案:
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
以便我们以后可以更改它,这就是我怀疑您所追求的。
这取决于你需要用它做什么,但你会做类似的事情:
#include <iostream>
using namespace std;
struct C
{
typedef int VType;
VType value;
};
int main()
{
C::VType a = 3;
cout << a << endl;
}