考虑布尔特技以检查是否一堆类型都是相同的类型:布尔特技和模板的模板参数
template<typename Type, typename... Types>
static constexpr bool allOf = std::is_same<
std::integer_sequence<bool, true, std::is_same<Type, Types>::value...>,
std::integer_sequence<bool, std::is_same<Type, Types>::value..., true>
>::value;
作为一个例子,可以使用它,因为它遵循以检查是否所有的参数是int
值:
template<typename... Args>
void f(Args&&... args) {
static_assert(allOf<int, Args...>, "!");
// ...
}
有没有什么办法与给定模板的模板参数的特用呢?
作为一个例子,用下面的代码:
template<typename> struct S {};
template<typename... Args>
void f(Args&&... args) {
static_assert(allOf<S, Args...>, "!");
// ...
}
的allOf
变量应被定义为:
template<template<typename> class Type, typename... Types>
static constexpr bool allOf = ???;
我想检查在Types
每个T
是如下形式的专门S<U>
,不管什么是U
。
可能吗?
将bool招很好,谁提出了这个? –
@ JohannesSchaub-litb我不记得我在哪里找到它了,反正它在这里。我遇到的版本是使用结构建立的,“std :: conditional”,“std :: true_type”和“std:.false_type”。当我发现变量模板比原始模板更紧凑时,我开始使用这个模板。 – skypjack
不错的把戏,无论如何 – max66