我有幾個純虛類,Matrix
和Vector
的。在我的代碼庫中,我試圖只創建它們的依賴關係,而不是它們的具體子類,例如SimpleTransformationMatrix44
和SimpleTranslationVector4
。這樣做的動機是,我可以使用第三方(適應)類來代替我的地方,沒有太多麻煩。從抽象類中聲明的重載算術運算符返回指針是否合理?
我想算術運算符(從here來源)過載:
T T::operator +(const T& b) const;
T T::operator -(const T& b) const;
T T::operator *(const T& b) const;
我想宣佈他們在純虛擬類,以便它是有效的對引用執行的操作/指針給他們,問題在於抽象類不能被值返回。我能想到的最好的解決辦法是這樣的:(!不倒管型)
std::unique_ptr<T> T::operator +(const T& b) const;
std::unique_ptr<T> T::operator -(const T& b) const;
std::unique_ptr<T> T::operator *(const T& b) const;
其中允許這樣的:
std::unique_ptr<Matrix> exampleFunction(const Matrix& matrix1, const Matrix& matrix2)
{
std::unique_ptr<Matrix> product = matrix1 * matrix2;
return std::move(product);
}
一個指針似乎是在這種情況下,唯一的選擇,因爲返回值是無效的,返回一個引用只是簡單的愚蠢。
所以我想我的問題是:有沒有我去了與這個想法的情節?如果你在一些你正在研究的代碼中看到它,你會不會想到WTF?有沒有更好的方法來實現這一目標?
對於遲到的重播,我沉迷了一段時間。我不確定我是否有模板化的'operator +()'(我沒有意識到那是DeadMG所說的),因爲你說的原因。我想我只會使用常規方法而不是運算符,這樣我就不會破壞重載約定。謝謝! – 2012-03-03 22:00:53