2 votes

comment créer une fonction modèle statique pour une classe de pointeurs ?

Ma classe modèle A contient une fonction qui appelle une fonction statique de la classe modèle :

template <typename T>
void A<T>::fun() {
    T obj = T::create();
    ....
}

Comment dois-je modifier cela si je veux que ce code fonctionne lorsque T = B* ? Je sais que je ne peux pas faire (*T)::create(), mais conceptuellement, c'est ce que je veux.

5voto

Andy Prowl Points 62121

Vous pourriez utiliser le std::remove_pointer trait de caractère :

#include <type_traits>

template <typename T>
void A<T>::fun() {
    T obj = std::remove_pointer<T>::type::create();
//          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    // ...
}

Où les deux std::remove_pointer<U*>::type y std::remove_pointer<U>::type donner U .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X