Tôi đang cố gắng sử dụng biểu thức gấp gọn gàng mà không thành công.C++ 17 cú pháp biểu thức gấp?
Ví dụ ở đây là một làm việc C++ 17 đang
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&...)
{
}
Tôi muốn dịch nó thành một hình thức nhỏ gọn hơn (không sử dụng các trung gian 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&...)
{
}
Tuy nhiên, điều này rõ ràng là bất hợp pháp C++ vì cả trình biên dịch g ++ và clang ++ đều không biên dịch được.
Câu hỏi của tôi:
- là nó chỉ là một vấn đề cú pháp trong
foo_compact()
? (Một trong những quyền là gì?)
Hoặc
- biểu lần không thể được sử dụng directy với subexpressions phức tạp và chúng ta không thể làm tốt hơn so với sử dụng phương pháp 2 bước (
foo()
mã sử dụngFold_And
struct)?
Argg ... Một lỗi mới bắt đầu! Cảm ơn và xin lỗi vì tiếng ồn! –
Biểu thức TIL fold có thể được sử dụng làm đối số mẫu. Một khoảnh khắc "duh" lớn đối với tôi. – StoryTeller