C++17 fold expression syntax?(C++17折叠表达式语法?)
本文介绍了C++17折叠表达式语法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用紧凑文件夹表达式,但未成功。
例如,下面是一个正在运行的C++17代码
template <bool... B>
struct Fold_And : std::integral_constant<bool, (B && ...)>
{
};
template <bool... B>
constexpr auto Fold_And_v = Fold_And<B...>::value;
template <typename V, typename... Vs>
std::enable_if_t<
Fold_And_v<std::is_floating_point_v<V>,
std::is_floating_point_v<Vs>...> >
foo(const V& v, const Vs&...)
{
}
我想将其转换为更紧凑的形式(不使用中间Fold_And)
template <typename V, typename... Vs>
std::enable_if_t<std::is_floating_point_v<V> && ... &&
std::is_floating_point_v<Vs> >
foo_compact(const V& v, const Vs&...)
{
}
但是,这显然是非法的C++,因为g++和clang++编译器都无法编译它。
我的问题:
- 只是
foo_compact()中的语法问题吗?(什么是正确的?)
或
- 折叠表达式不能直接用于复杂子表达式,我们不能比使用两步方法(
foo()使用Fold_And结构的代码)更好?
推荐答案
您差一点就成功了!折叠表达式必须用括号将括起来:
template <typename V, typename... Vs>
std::enable_if_t<(std::is_floating_point_v<V> && ... &&
std::is_floating_point_v<Vs>)>
foo_compact(const V& v, const Vs&...)
{
}
请注意<之后和最后>之前的圆括号。
这篇关于C++17折叠表达式语法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:C++17折叠表达式语法?
猜你喜欢
- GDB 不显示函数名 2022-01-01
- DoEvents 等效于 C++? 2021-01-01
- XML Schema 到 C++ 类 2022-01-01
- 哪个更快:if (bool) 或 if(int)? 2022-01-01
- 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
- 将 hdc 内容复制到位图 2022-09-04
- 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
- OpenGL 对象的 RAII 包装器 2021-01-01
- 如何提取 __VA_ARGS__? 2022-01-01
- 将函数的返回值分配给引用 C++? 2022-01-01
