接口:C++模板多態性障礙物
template <class T>
class Interface{
public:
typedef T Units;
virtual T get() = 0;
};
Implementation1:
class Implementation1: public Interface<float> {
public:
float get() {
return 0.0f;
}
};
Implementation2:
class Implementation2: public Interface<int> {
public:
int get() {
return 0;
}
};
容器(有錯誤):
class Container{
private:
Interface* floatGetter;
int n;
Timer::Units* array;
public:
Container(Interface* floatGetter, int n) {
this->floatGetter= floatGetter;
this->n = n;
array = new Timer::Units[n];
}
~Container() {
}
};
有關更多詳細信息,我有一個模板接口和派生類從這個接口沒有模板。其他一些類採用派生類的對象,但它將該對象作爲接口(換句話說,依賴注入)。但是這個類中的接口類型是由接口實現定義的。如何在C++中實現這個想法?
EDIT1:
例子:
Interface<float> myInterface1 = new Implementation1();
Interface<int> myInterface2 = new Implementation2();
Container container1 = new Container(myInterface1, 10);
Container container2 = new Container(myInterface2, 10);
我需要從容器的實施瞭解到界面模板參數。
對於一段精細的程序設計而言+1。我不認爲這是一個很好的解決方案,但它值得代表:) – 2012-02-01 20:37:57
謝謝:)我不認爲這是一個很好的解決方案,一般來說,但它只是表明模板元編程允許這沒有類型擦除。您還可以獲得迭代速度非常快的混合容器。 – enobayram 2012-02-01 21:23:02
它不是一個真正的混合容器(或者它?)...而是一個在內部容納多個容器的類型。對我來說,區別在於不同的類型在內部仍然是分開的,即使您有印象,它們不是,這意味着在使用類型擦除時,您可以維護容器不變量(例如,插入順序在序列容器),你可以做不一樣的這種方法(說實話,這只是一種預感,我已經閱讀過的代碼,但還沒有編譯/試過) – 2012-02-01 21:30:37