Variadic template et héritage
Bonjour à tous,
J'ai un soucis avec les variadic template, j'ai illustré mon problème avec un exemple simple. J'ai une classe abstraite Addable<E> où une méthode add(const E&) est déclarée comme virtuelle pure ainsi que la version de cette même méthode add(const E&, const Args&...) utilisant les variadic template qui elle est définie et utilise la fonction virtuelle pure.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#ifndef ADDABLE_H
#define ADDABLE_H
template <typename E>
class Addable {
public:
virtual void add(const E& element) = 0;
template <typename ...Args>
void add(const E& element, const Args&... args) {
this->add(element);
this->add(args...);
}
};
#endif // ADDABLE_H |
Maintenant j'ai une classe Vector<E> qui hérite de Addable<E> et où je définie donc la fonction add(const E&) puisque virtuelle pure dans Addable<E>. Cette méthode ajoute simplement un nouvel élément dans mon std::vector<E> qui est encapsulé dans la classe Vector<E>.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#ifndef VECTOR_H
#define VECTOR_H
#include <vector>
#include "Addable.h"
template <class E>
class Vector : public Addable<E> {
private:
std::vector<E> container_;
public:
Vector() {}
void add(const E& element) {
container_.push_back(element);
}
};
#endif // VECTOR_H |
Maintenant voici mon main, où je crée un objet Vector<int> et appelle la fonction add() utilisant les variadic template. Hé bien ça ne compile pas alors que si j'ajoute la fonction utilisant les variadic template dans la classe Vector<E> plutôt que dans Addable<E> ça compile et fonctionne (exactement la même signature) !! Pourtant je fais un héritage public de la classe Addable<E>, alors pourquoi est-ce que la méthode n'est pas trouvée ?
Code:
1 2 3 4 5 6 7 8 9 10
|
#include "Vector.h"
int main(int argc, char *argv[])
{
Vector<int> vec;
vec.add(1, 4, 6, 7, 2, 1, 6, 8);
return 0;
} |
Merci pour votre aide !
Bonne journée