0
我有,看起來大致是這樣的一類(生成)一套簡化時:減少重複幾乎模板實例
class A {
public:
static const int id = 0;
typedef int value_type;
void* data; // actually pointer to int
};
class B {
public:
static const int id = 1;
typedef float value_type;
void* data; // actually pointer to float
};
區共有幾十這些,有很多種類較少。我需要創建類來計算所有這些派生值。現在明顯的解決辦法是使用模板是這樣的:
template<class T>
class Derived {
public:
typename T::value_type value;
void update(const void* data) {
value = *static_cast<typename T::value_type*>(data);
// do some calculations
}
};
但是這是要實例化一個單獨的類爲每一個參數類A,B,等等;其中大部分將是相同的。另一種解決方案將是一個明顯的模板類這樣的:
template<typename T>
class Derived2 {
public:
T value;
void update(const void* data) {
value = *static_cast<T*>(data);
}
};
這將手動使用這個類被更新代碼,如果類A,B等,從變化而產生的模式。有沒有辦法使用value_type typedefs生成Derived2 <int>,Derived2 <float>等等的實例,或者至少將類型A,B等的手動參數化實例化類型匹配?
這是一個嵌入式系統,因此目標是減少相同代碼的數量,即使它導致更復雜的C++代碼。用實際類型替換void *會導致程序其他部分的代碼爆炸,所以不會完成。
'模板使用派生= Derived2的;'? –
我忘了提及,我們正在使用專有的C++ 2003編譯器。所以沒有C++ 11 – ojs
然後'template struct Derived:Derived2 {};'? –