1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Base{
public:
Base(){}
virtual ~Base(){}
Base(Base const & ) = delete;
Base & operator=(Base const & ) = delete;
vritual void foo() = 0;
};
template <typename T>
class Derived : public Base{
public:
/* on sait que cette fonction ne sera pas inline, mais cela permet
* de nous assurer que l'éditeur de liens ne s'étonnera pas de trouver
* plusieurs implémentations de la fonction pour un T donné
* et donc de respecter l'ODR
*/
inline void foo() override;
};
/* on peut envisager de fournir plusieurs spécialisations totales ;) */
template <typename T>
void Dervied<T>::foo(){
/* ... */
} |
Partager