Jon*_*Mee 9 c++ templates helper c++14 c++17
这个问题用了is_same<uint64_t, decltype(val)>::value
.
我希望那里是一个C++ 14 using alias
:is_same_v
类似于助手类型:conditional_t
,enable_if_t
,和tuple_element_t
我在用我的答案.因为我唯一能使用这些功能的是获得type
.所以*_t
助手才有意义.
这让我想到了我的问题,为什么using alias is_same_v
C++ 14中没有?我唯一使用is_same
的是它value
.也许is_same
通常不用于模板声明?
引入std::enable_if_t<cond, T>
较短形式的主要原因std::enable_if<cond, T>::type
不是仅仅计算4个字符.
由于std::enable_if
和它的其他类型特征主要用于依赖上下文,因此当(B)足够时写(A)是非常痛苦的:
例
template<class T, class = typename std::enable_if<cond, T>::type> // (A)
struct A;
Run Code Online (Sandbox Code Playgroud)
template<class T, class = std::enable_if_t<cond, T>> // (B)
struct A;
Run Code Online (Sandbox Code Playgroud)
我们之前需要typenamestd::enable_if
因为::type
是一个依赖名称,没有它,标准表示表达式应该被解析,好像::type
它实际上是一个值.
std::is_same<T, U>::value
实际上是一个值,因此不需要使用typename ; 这反过来意味着我们实际上仅仅削减了4个字符的数量..仅此而已.
进一步阅读
仅仅因为没有那么大的需要,所以没有人及时提出加法; 因为大多数人对以下替代方案感到满意:
std::is_same<T, U> {} == std::is_same<T, U>::value
std::is_same<T, U> () == std::is_same<T, U>::value
Run Code Online (Sandbox Code Playgroud)
进一步阅读
Stephan T. Lavavej撰写了一个建议,为适当的类型特征添加变量模板.
is_same_v
(以及其他*_v
类型的特征)已由N3854提出.他们没有进入C++ 14,但他们在Library Fundamentals TS中.
其中一个问题是与概念提案的潜在重叠,这可能为类型特征(以及许多其他当前的元编程技术)提供更好的替代方案.可以在此处找到对概念的过时但更清晰的解释.