dan*_*ani 4 c++ variadic-templates c++17
我想检查一个类型T也是参数包的一部分Ts.有些解决方案可以在C++ 14中实现,但如果在C++中可以简化这一点,我就会徘徊17.如果T在Ts编译器中找不到应该停止(static_assertion应该失败).
template<typename... Ts>
class A
{
template<typename T>
void action() {
// check that T is also in Ts (static_assertion)
}
}
Run Code Online (Sandbox Code Playgroud)
我听说折叠表达是新的热点:
static_assert((std::is_same_v<T, Ts> || ...));
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢图书馆特质:
static_assert(std::disjunction_v<std::is_same<T, Ts>...>);
Run Code Online (Sandbox Code Playgroud)
请注意,这会导致短路(这里可能不是非常有益,但需要注意的事项).折叠表达同样可行:
static_assert((std::is_same_v<T, Ts> || ...));
Run Code Online (Sandbox Code Playgroud)
(从@Barry偷走.)