Je voudrais pouvoir le faire:Déterminer le type de paramètre de modèle non de type
template <typename T x>
struct Test {
T val{x};
};
int main() {
Test<3> test;
return test.val;
}
Je répondais à une question here et j'utiliser le modèle suivant:
template <typename T, typename V, typename VP, V(T::*getf)(), void (T::*setf)(VP)>
Chacun des types est spécifié manuellement. Mais c'est une duplication car T
, V
et VP
sont déjà contenus dans les pointeurs vers les fonctions membres getf
et setf
.
Mais si j'essaie un modèle avec seulement
template <V(T::*getf)(), void (T::*setf)(VP)>
ou
template <V(T::*getf)(), void (T::*setf)(VP), typename T, typename V, typename VP>
alors les types ne peuvent pas être déterminés.
Ensuite, j'essayé spécialisation:
template <typename T, typename T2>
struct Accessor;
template <typename V, typename T, typename VP>
struct Accessor <V(T::*)(), void (T::*)(VP)>
qui déterminera tous les types si l'utilisation
typedef Accessor<
decltype(&TargetClass::GetFoo),
decltype(&TargetClass::SetFoo)> fooAcessor;
Mais maintenant, je n'ai pas les pointeurs plus, seuls les types.
Est-il possible d'écrire un modèle afin que les types peuvent être déterminées automatiquement à partir du paramètre de modèle non de type?
@Muscampester Il est Barry, le magique C++ yorkshire! : D – Quentin
@Quentin Ahem, [Westie] (https://fr.wikipedia.org/wiki/West_Highland_White_Terrier)! – Barry
Oups. Busted cover est cassé, je ne sais rien à propos des chiens :(- Mais bon, il y a de la magie et il y a du C++, et c'est un chien, c'est comme si seulement 25% d'échec! – Quentin