开发者

C++ typename of member variable

开发者 https://www.devze.com 2022-12-24 12:08 出处:网络
Is it possible t开发者_JAVA百科o get typename of a member variable? For example: struct C { int value ; };

Is it possible t开发者_JAVA百科o get typename of a member variable? For example:

struct C { int value ; };

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

Thanks


Not in C++03. C++0x introduces decltype:

typedef decltype(C::value) type;

Some compilers have a typeof extension, though:

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

If you're okay with Boost, they have a library for it:

typedef BOOST_TYPEOF(C::value) type;


Only if you are fine with processing the type in a function

struct C { int value ; };

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

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

It won't work with reference data members. C++0x will allow decltype(C::value) to do that more easily. Not only that, but it allows decltype(C::value + 5) and any other fancy expression stuff within the decltype. Gcc4.5 already supports it.


May not be exactly what you're looking for, but a possibly better solution in the long run:

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

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

This isn't exactly what you want, but it does allow us to hide the implementation type of C::value so that we can later change it, which is what I suspect you're after.


It depends what you need to do with it but you would do something like:

#include <iostream>
using namespace std;

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

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号