我可以enable_if与typedef一起使用吗?
Can I use enable_if together with typedef?
我想定义一个类型取决于某些条件的变量。我想要这样的东西:
typedef typename enable_if<cond, int>::type Type;
typedef typename enable_if<!cond, double>::type Type;
但是堆积者说我重新定义了类型。
我该怎么做?
我可以将
enable_if
与 typedef 一起使用吗?
不,你不能。 如果条件为 false,std::enable_if
则保留未定义类型。仅当条件为真时,才定义成员type
;
template< bool B, class T = void > struct enable_if;
如果
B
true
,则std::enable_if
有一个公共成员 typedef 类型,等于T
;否则,没有成员类型定义。
要使 typedef 正常工作,当条件为真和为假时,它都需要两种情况的类型。 实施enable_if
是为了协助与 SFINAE 相关的方案。
那么
我该怎么做?
使用std::conditional
.条件将包含一个成员 typedef (type
),用于条件的true
和false
结果。
template< bool B, class T, class F > struct conditional;
提供成员 typedef 类型,如果在编译时
true
B
则定义为T
,如果B
false
则定义为F
。
因此,以下就足够了;
typedef typename std::conditional<cond, int, double>::type Type;
或者更简洁;
using Type = std::conditional_t<cond, int, double>;
您需要使用 std::conditional
:
#include <type_traits>
// c++11:
typedef typename std::conditional<cond, int, double>::type Type;
// c++14:
typedef std::conditional_t<cond, int, double> Type;
另请注意,从 c++11 开始,您可以将 using
关键字用于类型和模板别名(在我看来更干净一些):
// c++11
using Type = typename std::conditional<cond, int, double>::type;
// c++14
using Type = std::conditional_t<cond, int, double>;
相关文章:
- C++:TypeDef使用元组
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 如何在 C++ 中将 typedef 与类初始值设定项参数一起使用?
- 如何将模板与Typedef一起使用
- 使用#Define和Typedef与数据类型A一起使用
- 如何在编译时检查两种类型是否相同(奖励点是否可与Boost strong typedef一起使用)
- 为什么当 typedef const 指针与额外的 const 一起使用时,编译器不会给出错误?
- Functors-如何将它们与typedef一起使用
- typedef的替代品或将typedef与if-else一起使用的正确方法
- 将typedef与构造函数参数一起使用
- qmlRegisterType与Q_ENUM和typedef enum一起使用
- 将C++与Objective-C一起使用,如何修复"Conflicting declaration 'typedef int BOOL'"?
- 我可以enable_if与typedef一起使用吗?