我打算创建一个变量模板,它采用(变量)模板模板参数和一个类型名:
template <template <typename> auto MetaPredicate, typename T>
constexpr bool has_predicate_v_ = requires {
{ MetaPredicate<T> } -> std::convertible_to<bool>;
}
期望在哪里:
template <typename T>
struct dummy_01 {
inline static constexpr bool value = true;
};
template <typename T>
inline constexpr bool dummy_01_v = dummy_01<T>::value;
std::cout << std::boolalpha << has_predicate_v_<dummy_01_v, int> << '\n'; // true
但这不起作用。如果它们以标准存在,那将很有用。
另一种情况是创建一个元函数count_if
:
template <typename Type, template <typename> bool Predicate>
struct count_if {
inline static constexpr size_t value = /** ... **/;
};
template <typename Type, template <typename> bool Predicate>
inline constexpr size_t count_if_v = count_if<Type, Predicate>::value;
// ...
count_if_v<std::tuple<int, double, void, size_t, unsigned short>,
std::is_integral_v> // yields to 3
还有一个与我的问题有关的建议:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2008r0.html
- 为什么目前没有可变模板模板参数/参数?
- 提案的状态如何?
- 变量模板模板参数/参数是否有任何可能的替代方案?