示例:
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
}谢谢!
发布于 2010-09-09 07:20:54
你不能。要么使用编译器特定的扩展,要么使用Boost的Typeof (它将编译器特定的行为隐藏在一致的接口后面)。
在C++0x中,您可以使用decltype:decltype(ip) iv = 3;如果您的编译器支持C++0x的这一方面,那么您就走运了。
发布于 2010-09-09 07:12:42
在当前的C++规范中,您无法获取变量的类型,至少在没有特定于编译器的东西的情况下是无法获取的(但是可以尝试boost::typeof,它以一种透明的方式收集这些技巧)。
你所写的基本上是一个从类型中删除指针限定符的模板:type_of<int>::type是int,type_of<int*>::type也是。
https://stackoverflow.com/questions/3672597
复制相似问题