2010-06-05 5 views
0
class A {}; 

class B {}; 

class C {}; 

class D {}; 

//A+B , A+C, B+C , A+D, D+C namely all of these combinations will be possible just one functions 
+4

Vous devez préciser ce que vous voulez. Donnez de vrais exemples, de vrais problèmes, etc. Je suppose que l'anglais n'est pas votre langue maternelle, alors essayez d'expliquer votre problème avec autant de détails que possible. – GManNickG

Répondre

2
template <typename T, typename U> 
void foo(const T& pX, const U& pY) 
{ 
    // do stuff 
} 

Ce n'est pas ce que vous voulez, en soi, car il fait une nouvelle fonction pour chaque combinaison différente de T et U, mais il est un modèle de fonction.


Ceci interdit T et U d'être le même:

template <bool> struct static_assert {}; 
template <> struct<true> static_assert {}; 

#define STATIC_ASSERT(pValue) static_assert<(pValue)>() 

// ... 

template <typename T, typename U> 
struct is_different 
{ 
    static const bool value = true; 
}; 

template <typename T> 
struct is_different<T, T> 
{ 
    static const bool value = false; 
}; 

// ... 

template <typename T, typename U> 
void foo(const T& pX, const U& pY) 
{ 
    STATIC_ASSERT(is_different<T, U>::value); 

    // do stuff 
} 
+0

Si l'OP veut seulement écrire une fonction pour toutes les combinaisons possibles, alors c'est la seule façon de procéder. Cependant, il devrait aussi être possible d'utiliser le polymorphisme pour écrire une fonction d'addition par classe. – Puppy

+0

Ceci inclut A + A, B + B, B + A, etc. qui ne sont pas supposés dans la question. –

+0

@Kirill: Vrai, pas trop difficile de s'arrêter quand même. – GManNickG

Questions connexes