как получить тип переменной? - PullRequest
0 голосов
/ 09 сентября 2010

пример:

template<typename T>
struct type_of {
   typedef boost::mpl::if_<boost::is_pointer<T>,
   typename boost::remove_pointer<T>::type,
   T
   >::type type;
};

int main() {
   int* ip;
   type_of<ip>::type iv = 3; // error: 'ip' cannot appear in a constant-expression
}

Спасибо! * * 1004

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Вы не можете. Либо используйте специфичные для компилятора расширения, либо Boost's Typeof (который скрывает специфичное для компилятора поведение за непротиворечивым интерфейсом).

В C ++ 0x вы можете использовать decltype: decltype(ip) iv = 3; Если ваш компилятор поддерживает этот аспект C ++ 0x, вам повезло.

2 голосов
/ 09 сентября 2010

В текущей норме C ++ вы не можете получить тип переменных, по крайней мере, без специфических для компилятора вещей (но попробуйте boost::typeof, который собирает эти трюки прозрачным способом).

То, что вы написали, это в основном шаблон, который удаляет квалификатор указателя из типа: type_of<int>::type is int as is type_of<int*>::type.

...