我努力实现以下目标:C++模板模板非类型参数
template<template<typename> bool Function_, typename ... Types_>
constexpr auto find(Tuple<Types_ ... >) noexcept
{
// ...
}
,其中一个可能的功能可能是:
template<typename T>
inline constexpr bool is_pointer_v = is_pointer<T>::value;
所以后来找到的用法是:
Tuple<int, char, void *> t;
find<is_pointer_v>(t);
不用担心执行找不到,我只是在问怎么做“template <typename> bool Function_
”因为bool
部分目前在C++中无效。
任何帮助表示赞赏!
编辑:
这里是为什么我不能通过 “is_pointer
” 给函数的一个例子:
template<typename T_>
constexpr auto add_pointer(Type<T_>) noexcept
{ return type_c<T_ *>; }
template<typename F_, typename T_>
constexpr auto apply(F_ f, Type<T_> t) noexcept
{
return f(t);
}
int main(void)
{
Type<int> t_i;
apply(add_pointer, t_i);
}
这将产生编译器错误:
error: no matching function for call to ‘apply(< unresolved overloaded function type >, sigma::meta::Type&)’ apply(add_pointer, t_i);
您可以将'is_pointer'作为正常的模板模板参数,并访问其中的'value'成员。 –
不幸的是我使用了更多的boost :: hana风格的方法,其中所有“is_pointer”结构实际上都是函数 –
如果它们实际上是函数,那么可以将其作为普通类型参数。我不认为你可以展示一个激励的例子? –