作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要检查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
。
最佳答案
您需要一个工具来对可变参数进行合取运算。
#include <iostream>
#include <type_traits>
template<class...> struct conjunction : std::true_type { };
template<class B1> struct conjunction<B1> : B1 { };
template<class B1, class... Bn>
struct conjunction<B1, Bn...>
: std::conditional<bool(B1::value), conjunction<Bn...>, B1>::type {};
template <typename A, typename ...B>
class Foo : public A, public B...
{
public:
template <typename std::enable_if<std::is_default_constructible<A>::value &&
conjunction<std::is_default_constructible<B>...>::value, bool>::type = true>
Foo()
{}
Foo(A &&a, B && ... b)
: A(std::forward<A>(a)),
B(std::forward<B>(b))...
{}
};
struct A {};
struct B {};
struct C {
C(int x) {}
};
int main()
{
Foo<A, B> foo;
//Foo<A, B, C> bar;
return 0;
}
https://godbolt.org/z/d3jvM4
关于c++ - C++ 11中的合取类型特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63229532/
我以前使用过像 Netbeans 和 eclipse 这样的 IDE。 我在 friend 的电脑上下载了“Visual Studio Express 2013 for windows desktop
我正在尝试弄清楚如何在 GBA 大小的 EZ Flash 3 合 1 卡中对 PSRAM 进行编程。基本上重复 GBA Exploader 和其他程序所做的事情。 如果我选择一个 block 并对其进
Filter1=re.findall(r'',PageSource) Filter2=re.findall(r'',PageSource) Filter3=re.findall(r'(.*?).*?'
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是一名优秀的程序员,十分优秀!