如何获得变量类型?

时间:2010-09-08 23:08:44

标签: c++ boost boost-mpl

示例:

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
}

谢谢!

2 个答案:

答案 0 :(得分:2)

在C ++的当前规范中,你不能得到变量的类型,至少在没有编译器特定的东西的情况下(但是试试boost::typeof以透明的方式收集这些技巧)。

您所写的内容基本上是一个从类型中移除指针限定符的模板:type_of<int>::type inttype_of<int*>::type一样。

答案 1 :(得分:2)

你做不到。使用特定于编译器的扩展或Boost的Typeof(它隐藏了一致接口背后的编译器特定行为)。

在C ++ 0x中,您可以使用decltypedecltype(ip) iv = 3;如果您的编译器支持C ++ 0x的这个方面,那么您很幸运。