So implementieren Sie im abstrakten Code die abstrakte Basisklasse in einem allgemeinen Fall. Der Code ist von einer Bibliothek, an der ich gerade arbeite, vereinfacht. Eine explizite Implementierung für int und double ist also keine Option.So implementieren Sie eine abstrakte Methode, wenn die abstrakte Klasse in einem Variadic-Kontext verwendet wird
template <typename T>
struct Foo
{
virtual void send(T t) = 0;
};
template <typename...T>
struct Bar : Foo<T>...
{
void send(T t) override { // does not compile because
// abstract method not implemented
}
};
int main() {
// example usage
Bar<int, double> b;
b.send(1);
b.send(2.3);
}
Vielen Dank im Voraus.
Bearbeiten: Virtuelle zu abstrakten Methode hinzugefügt.
Hey, können Sie mir sagen, was der Unterschied ist zwischen: 'foo2 ...' und 'foo2 ' (Punkte außerhalb Klammer gegen innen Klammer) –
Brandon
@Brandon - sind völlig verschiedene Dinge; Wenn Sie 'Foo2' schreiben, deklarieren Sie eine einzelne Basisklasse 'Foo2 ' mit 'sizeof ... (T)' Template-Parametern; Wenn Sie 'Foo2 ...' schreiben, deklarieren Sie 'sizeof ... (T)' Basisklassen, 'Foo2 , Foo2 , Foo2 /* etc * /' mit jeweils einem einzelnen Template-Parameter –
max66