仅在c++ 11中为enable_if
Is enable_if only C++11?
在c++参考网站上查找enable_if,据说它只是c++ 11的一个特性。
然而,我在c++ 98类型上使用GCC编译器编译了我自己的enable_if版本,它工作得很好,似乎能够为任何版本的c++工作(1被打印出来):
#include <iostream>
namespace egg
{
template<bool B,
typename T = void>
struct enable_if
{
};
template<typename T>
struct enable_if<true, T>
{
typedef T type;
};
}
int main()
{
egg::enable_if<1 == 1, int>::type x = 1;
std::cout << x << std::endl;
}
我说enable_if实际上是任何c++版本的一个特性,但只是被引入到c++标准中,还是有其他原因?
enable_if
在c++ 11中被添加到标准中(源代码)。它不依赖于任何c++ 11的标准特性,所以它的代码可以自己在c++ 03中编写,正如你可以从这个可能的实现
template<bool B, class T = void>
struct enable_if {};
template<class T>
struct enable_if<true, T> { typedef T type; };
这只是使用模板元编程和SFINAE。
您也可以使用boost::enable_if
而不是自己编写,这也是c++ 98/03兼容的
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何删除peer if else分支中的冗长句子
- 我似乎对if/else的基本语句有问题:/
- if数组上的随机数
- 将按位if条件转换为普通if条件
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 使用if-else将数字转换为单词
- 为什么简单的算术减法在"if"条件下不起作用?
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- SFINAE with boost enable if