示例:
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
}
谢谢!
答案 0 :(得分:2)
在C ++的当前规范中,你不能得到变量的类型,至少在没有编译器特定的东西的情况下(但是试试boost::typeof
以透明的方式收集这些技巧)。
您所写的内容基本上是一个从类型中移除指针限定符的模板:type_of<int>::type
int
与type_of<int*>::type
一样。
答案 1 :(得分:2)
你做不到。使用特定于编译器的扩展或Boost的Typeof(它隐藏了一致接口背后的编译器特定行为)。
在C ++ 0x中,您可以使用decltype
:decltype(ip) iv = 3;
如果您的编译器支持C ++ 0x的这个方面,那么您很幸运。