Имя типа C++ членской переменной

Действительно ли возможно получить имя типа членской переменной? Например:

struct C { int value ; };

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

Спасибо

5
задан Anycorn 19 March 2010 в 01:04
поделиться

4 ответа

Не в 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
ответ дан 13 December 2019 в 22:05
поделиться

Только если у вас все в порядке с обработкой типа в функции

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 уже поддерживает это.

4
ответ дан 13 December 2019 в 22:05
поделиться

Возможно, это не совсем то, что вы ищете, но, возможно, лучшее решение в долгосрочной перспективе:

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 , чтобы мы могли позже изменить его, что, как я подозреваю, вам нужно.

1
ответ дан 13 December 2019 в 22:05
поделиться

Это зависит от того, что вам нужно с этим делать, но вы бы сделали что-то вроде:

#include <iostream>
using namespace std;

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

int main()
{
    C::VType a = 3;
    cout << a << endl;
}
0
ответ дан 13 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: