我有几个纯虚类,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