- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有什么方法可以使用 std::numeric_limits<T>::is_integer
和 std::numeric_limits<T>::is_specialized
改变模板行为?
例如我可以这样做吗:
template < typename T >
void foo( const T& bar )
{
if( std::numeric_limits< T >::is_integer )
{
isInt( bar );
}
else if( std::numeric_limits< T >::is_specialized )
{
isFloat( bar );
}
else
{
isString( bar );
}
}
最佳答案
您拥有的当前有效。但是,您应该更喜欢使用 SFINAE 和 <type_traits>
相反,因为它会根据类型分派(dispatch)到不同的函数,而不是依赖于分支条件(可能会或可能不会优化掉)。
您可以使用 std::enable_if
执行以下操作:
template<typename T,
typename std::enable_if<std::is_integral<T>::value, int>::type = 0>
void foo(const T& t) {
isInt(t);
}
template<typename T,
typename std::enable_if<std::is_floating_point<T>::value, int>::type = 0>
void foo(const T& t) {
isFloat(t);
}
template<typename T,
typename std::enable_if<!std::is_integral<T>::value &&
!std::is_floating_point<T>::value, int>::type = 0>
void foo(const T& t) {
isString(t);
}
之所以第二个参数为enable_if
设置为 int
是为了节省我们一些打字。如果int
被排除在外然后我们必须做typename = typename std::enable_if<std::is_integral<T>::value>::type
而不是仅仅将其设置为 0
这将为我们节省几个字符来输入。它们在所有意图和目的上都是等价的。
关于c++ - std::numeric_limits 作为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251380/
我正在阅读 Setting an int to Infinity in C++ .我知道当一个人需要真正的无限时,应该使用 numeric_limits::infinity() ;我猜它背后的基本原理
我有一个错误 limits:30:29: error: 'numeric_limits' is not a template 在文件中,它为特定类重载了 std::numeric_limits:
如果你错误地做了类似的事情: #include int arr[3]; auto x = std::numeric_limits::max(); 您将从 STL 实现中的文件中获得无用的错误消息。
为什么这不起作用? enum : long {MaxValue = std::numeric_limits::max()}; 我收到错误:错误 1 错误 C2057:预期的常量表达式 它有什么不固
我在调试一些涉及确定加法运算是否会下溢 double 的代码时遇到了一些奇怪的行为,至少在我看来是这样。这是一个示例程序,展示了我的发现。 #include #include using std:
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why is std::numeric_limits::max() a function? 为什么 nume
我有一个带有两个参数的函数,一个其元素正在被测试的 vector ,以及一个我们输入为真或假的 bool 变量。如果我们输入 true 那么它应该隔离所有数字总和为偶数的元素并将其放置到一个新 vec
numeric_limits::min(); numeric_limits::lowest(); 这两个函数返回的值有什么不同? 最佳答案 C++11 标准第 18.3.2.4 段规定: static
我有一个包含范围参数的模板统计类。 template class limitStats { public: limitStats(T mx, T min) : max(mx),
我在为 enum 中的元素分配最大值时遇到问题。第一: protected: enum {DEFAULT_PADDING=std::numeric_limits::max()}; 结果: ./
基本上,我想这样做: // error: function call is not allowed in a constant expression: static_assert( std::nu
我正在使用想要使用 STL 的数据结构 limits确定我给它的结构的最小值、最大值和无穷大(我认为只有这些)值。我正在使用 Visual C++ 2010,如果有这方面的具体实现细节的话。 这是我的
有什么方法可以使用 std::numeric_limits::is_integer和 std::numeric_limits::is_specialized改变模板行为? 例如我可以这样做吗: tem
C++11 标准是否指定 numeric_limits::min和 max必须是可在模板中使用的常量表达式或 static_assert ? 更一般地说,如何根据标准找到常量表达式的函数列表? 最佳答
我有一个名为 Atomic 的类,它基本上是一个 _Atomic_word加上调用 gcc 原子内置函数的方法。 class Atomic{ mutable volatile _Atomic_
我创建了自己的类型,没有任何比较器,也没有专门化 std::numeric_limits .尽管如此,出于某种原因,std::numeric_limits编译得很好。为什么 c++ 标准委员会定义 n
我想在一个类中定义一个常量,它的值是最大可能的 int。像这样的: class A { ... static const int ERROR_VALUE = std::numeric_
我正在尝试从源代码编译应用程序,FlyWithLua ,其中包括 sol2 库。 我正在按照说明进行操作,但是当我运行 cmake --build ./build 时,出现以下错误: In file
当我编译这段 C++ 代码时,我没想到会看到这样的输出 #include #include #include int main() { const long double ldMinFl
我正在尝试编写一个分别处理数字和非数字数据的流类。有人可以向我解释为什么这段代码无法编译吗? #include #include #include #include class Stream
我是一名优秀的程序员,十分优秀!