0

例子:

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
}

谢谢!

4

2 回答 2

2

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

你写的基本上是一个从类型中删除指针限定符的模板:type_of<int>::typeis intas is type_of<int*>::type

于 2010-09-08T23:12:41.873 回答
2

你不能。要么使用编译器特定的扩展,要么使用 Boost 的 Typeof(它将编译器特定的行为隐藏在一致的接口后面)。

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

于 2010-09-08T23:20:53.860 回答