爲了解決這個問題,這非常簡化。說我有一個層次:基於模板參數在C++中模擬動態調度
struct Base {
virtual int precision() const = 0;
};
template<int Precision>
struct Derived : public Base {
typedef Traits<Precision>::Type Type;
Derived(Type data) : value(data) {}
virtual int precision() const { return Precision; }
Type value;
};
我想用簽名非模板功能:
Base* function(const Base& a, const Base& b);
凡函數的結果的具體類型是相同類型取其a
和b
具有較大的Precision
;像下面的僞代碼:
Base* function(const Base& a, const Base& b) {
if (a.precision() > b.precision())
return new A(((A&)a).value + A(b.value).value);
else if (a.precision() < b.precision())
return new B(B(((A&)a).value).value + ((B&)b).value);
else
return new A(((A&)a).value + ((A&)b).value);
}
凡A
和B
是特定類型的分別a
和b
。我想要function
獨立於有多少個實例Derived
進行操作。我想避免比較大規模的typeid()
表,雖然RTTI很好的答案。有任何想法嗎?
我想你應該提到你不知道完整的類的類型。你只知道'Base&'。包括我自己在內的幾個答案確實假設你知道確切類型'Derived '。 – 2010-03-12 22:15:11
注意對一個答案的評論:另一個要求是該函數不能是一個模板;它必須具有給定的Base *(Base&Base)簽名。 – 2010-03-12 22:20:12
將限制更清楚地納入問題中。 – 2010-03-12 22:23:26