C++ typename переменной-члена
Можно ли получить typename переменной-члена? Например:
struct C { int value ; };
typedef typeof(C::value) type; // something like that?
Спасибо
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 уже поддерживает его.
Может быть не совсем то, что вы ищете, но, возможно, лучшее решение в долгосрочной перспективе:
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
, чтобы мы могли позже изменить его, что, как я подозреваю, вам нужно.