【发布时间】:2020-11-23 12:37:01
【问题描述】:
我需要检查std::enable_if 中的可变参数:
使用 C++17 我会写:
template <typename A, typename ...B>
class Foo : public A, public B...
{
public:
template <typename = std::enable_if_t<std::is_default_constructible_v<A> &&
(std::is_default_constructible_v<B> && ...)>>
Foo()
{}
Foo(A &&a, B && ... b)
: A(std::forward<A>(a)),
B(std::forward<B>(b))...
{}
};
但是 C++11 没有这种扩展参数包的特性。它也不提供std::conjunction。
结合C++11有什么简单的实现方式? 我想带有递归的 SFINAE 就足够了,但我无法绕过它。
【问题讨论】:
-
您是否尝试过使用以下可能的实现来制作自己的
conjunction:en.cppreference.com/w/cpp/types/conjunction -
@NathanOliver 谢谢。不知怎的,我错过了它......
标签: c++ c++11 variadic-templates sfinae