我在c++中找不到
std::conditional< >::type
和std::conditional_t< >
之间的区别。
当我编译时
using A = typename conditional< true, int, char>::type;
using B = typename conditional_t< true, int, char>::type;
错误:预期的嵌套名称说明符消失。 我无法使用
conditional
和嵌套,而 conditional_t
似乎可以嵌套。
由于 C++ 模板中的设计流程,事实证明为类型函数创建辅助别名很有用。
所以
std::conditional<bool, A, B>
是一个类型函数模板。它的 ::type
是 A
或 B
。
std::conditional_t<bool, A, B>
是一个辅助别名,其计算结果为 std::conditional<bool, A, B>::type
。在大多数情况下,在 ::type
上执行 std::conditional
需要您使用 typename
前缀来消除歧义,以便编译器知道 ::type
是类型而不是值 - 但 std::conditional_t
会为您执行此操作,因为它在语法上是这样的已知是没有 typename
的类型。
在 C++
std
库中,几乎所有(也许是所有)具有 ::type
成员的模板现在都带有一个帮助器 _t
模板来执行此操作,这使得一堆使用起来更好。