获取对象的类型

时间:2010-08-29 19:57:48

标签: c++ typeinfo

我正试图沿着这些方向做点什么:

int var = 5;
std::numeric_limits<typeid(var)>::max();

但令人惊讶的是,它不起作用。我该如何解决这个问题? 感谢。

2 个答案:

答案 0 :(得分:11)

您可以使用以下类型:

int the_max = std::numeric_limits<int>::max()

您可以使用辅助功能模板:

template <typename T>
T type_max(T)
{
    return std::numeric_limits<T>::max();
}

// use:
int x = 0;
int the_max = type_max(x);

在C ++ 0x中,您可以使用decltype

int x = 0;
int the_max = std::numeric_limits<decltype(x)>::max();

答案 1 :(得分:4)

typeid不返回类型,而是返回运行时type_info对象。该模板参数需要编译时类型,因此不起作用。

在像gcc这样的编译器中,您可以使用

std::numeric_limits<typeof(var)>::max();

否则,您可以尝试Boost.Typeof

在C ++ 0x中,您可以使用

std::numeric_limits<decltype(var)>::max();

(BTW,@James's type_max如果你不需要明确的类型会好得多。)