Je suis en train de réaliser ce qui suit:modèle de modèle de C paramètre non type
template<template<typename> bool Function_, typename ... Types_>
constexpr auto find(Tuple<Types_ ... >) noexcept
{
// ...
}
où une fonction possible pourrait être:
template<typename T>
inline constexpr bool is_pointer_v = is_pointer<T>::value;
donc alors l'utilisation de recherche serait:
Tuple<int, char, void *> t;
find<is_pointer_v>(t);
ne vous inquiétez pas au sujet de la mise en œuvre de trouver, je vous demande simplement sur la façon de faire « template <typename> bool Function_
» comme la partie bool
est actuellement invalide en C++.
toute aide est appréciée!
EDIT:
ici est un exemple des raisons pour lesquelles je ne peux pas passer le "is_pointer
" à la fonction:
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);
}
ce produit l'erreur du compilateur:
error: no matching function for call to ‘apply(< unresolved overloaded function type >, sigma::meta::Type&)’ apply(add_pointer, t_i);
Vous pouvez prendre 'is_pointer' comme paramètre de modèle de modèle normal et accéder à son membre' value' dans le corps. –
malheureusement j'utilise une approche plus boost :: hana où toutes les structures "is_pointer" sont réellement des fonctions –
Si elles sont réellement des fonctions, vous pouvez en prendre une en tant que paramètre de type normal. Je ne pense pas que vous pourriez montrer un exemple motivant? –