2017-07-01 3 views
1

Ich möchte golang wie Schnittstellen ohne Vererbung in C++ implementieren.Mimic Golang-ähnliche Schnittstellen in C++

ZB: -

//interface 
struct Copyable{ 
    void copy(); 
} 

class Animal { //which implements the interface but doesn't inherit it. 
.... 
void copy(); 
... 
} 

//consumer function 
void Copy(Interface<Copyable> item){ 
    item.copy(); 
} 

int main(){ 
Animal a; 
Copy(a); 
} 

Gibt es eine Möglichkeit, dies zu implementieren?

Antwort

3

Ja, können Sie Vorlagen:

template <typename T> 
void Copy(T item) { 
    item.copy(); 
} 

Dann brauchen Sie nicht die Klasse Copyable überhaupt.

Wenn der Typ T keine copy() Methode hat, wird es nicht kompilieren (wie Sie erwarten würden).

C++ Concepts ist eine vorgeschlagene Funktion, die es irgendwann in die Standardsprache bringen könnte, aber momentan nur von bestimmten Compilern wie GCC (6 oder höher) unterstützt wird.

+0

hmm das habe ich nicht erwartet. Aber erhöht sich nicht die Kopierbarkeit, wenn Sie mehrere Funktionen haben? – Kavinda

+0

Danke. Ja Konzepte scheinen mit meiner Idee identisch zu sein. – Kavinda