鉴于int a;,我知道以下内容返回a可容纳的最大值.
numeric_limits<int>::max()
不过,我想获得相同的信息不知道a是int.我想做这样的事情:
numeric_limits<typeof<a>>::max()
没有这种确切的语法,但使用ISO C++甚至可能吗?
type_of()是最接近的,但我宁愿不在我们的代码库中添加任何额外内容.由于我们已经使用了Boost,ÉricMalenfant对Boost.Typeof的引用促使我使用
numeric_limits<BOOST_TYPEOF(m_focusspeed)>::max()
我以前从没用过它.再次感谢您提供了许多明智的回复.
template<typename T>
T get_lim( const T & x)
{
return numeric_limits<T>::max();
}
Run Code Online (Sandbox Code Playgroud)
好的是你可以在不明确指定T的情况下使用它:
size_t l = get_lim(34);
numeric_limits是所谓的类型特征.它以不引人注目的方式存储与类型相关的信息.
关于您的问题,您可以定义一个模板函数,它将为您确定变量的类型.
template <typename T>
T valued_max( const T& v )
{
return numeric_limits<T>::max();
};
template <typename T>
T valued_min( const T& v )
{
return numeric_limits<T>::min();
};
Run Code Online (Sandbox Code Playgroud)
或者只是创建一个小型返回结构:
template <typename T>
struct TypeOf
{
typedef T type;
};
template <typename T>
TypeOf<T> type_of( const T& v )
{
return TypeOf<T>();
}
int a;
numeric_limits<type_of(a)::type>::max();
Run Code Online (Sandbox Code Playgroud)
只是FWIW,C++ 0x也会有decltype,这几乎是一样的typeof.他们选择了一个新名称,主要是因为语义在一种情况下是不同的.typeof(gcc)的现有实现从类型中删除引用,因此typeof(int &) == int.该标准要求decltype(int &) == int&.这并不常见,但他们决定使用不同的名称来防止对现有代码进行任何静默更改.
| 归档时间: |
|
| 查看次数: |
8384 次 |
| 最近记录: |