2017-07-01 2 views
1

私はgolangのようなインタフェースを継承なしでC++で実装したいと思っています。C++のGim-likeのインタフェースを模倣する

例: -

//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); 
} 

これを実装する方法はありますか?

答えて

3

はい、あなたは、テンプレートを使用することができます。

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

次に、あなたは、すべてのクラスCopyableは必要ありません。

タイプTにはcopy()メソッドが含まれていないと、(期待通りに)コンパイルできません。

C++ Conceptsはいつか標準言語にする可能性がある提案された機能ですが、現在はGCC(6以降)などの特定のコンパイラでのみサポートされています。

+0

私はそれを期待していませんでした。しかし、複数の機能を持っている場合は、コピー可能で明瞭さを向上させることはありませんか? – Kavinda

+0

ありがとうございます。はいコンセプトは私の考えと同じようです。 – Kavinda

関連する問題