ich folgend zu erreichen versuchen:C++ Template-Template-nicht-Typ-Parameter
template<template<typename> bool Function_, typename ... Types_>
constexpr auto find(Tuple<Types_ ... >) noexcept
{
// ...
}
, wo eine mögliche Funktion sein könnte:
template<typename T>
inline constexpr bool is_pointer_v = is_pointer<T>::value;
so ist, dann wäre die Verwendung von Fund sein:
Tuple<int, char, void *> t;
find<is_pointer_v>(t);
Mach dir keine Sorgen über die Implementierung von finden, ich bin nur gefragt, wie zu tun "template <typename> bool Function_
" wie der bool
Teil in C++ derzeit ungültig ist.
jede Hilfe ist willkommen!
EDIT:
hier ist ein Beispiel dafür, warum ich die "is_pointer
", um die Funktion nicht passieren kann:
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);
}
dies den Compiler-Fehler erzeugt:
error: no matching function for call to ‘apply(< unresolved overloaded function type >, sigma::meta::Type&)’ apply(add_pointer, t_i);
Sie könnten 'is_pointer' als normalen Vorlagen-Vorlagenparameter verwenden und auf ihr' value'-Element im Hauptteil zugreifen. –
Leider benutze ich einen boost :: hana styled Ansatz, bei dem alle "is_pointer" Strukturen eigentlich Funktionen sind –
Wenn sie tatsächlich Funktionen sind, können Sie einen als normalen Typparameter nehmen. Ich nehme nicht an, dass Sie ein motivierendes Beispiel zeigen könnten? –