我有两个班子:
class RowMatrix
{
public:
double* getRowSlice ();
double get (int row, int column);
void set (int row, int column);
};
class ColumnMatrix
{
public:
double* getColumnSlice ();
double get (int row, int column);
void set (int row, int column);
};
现在,在病媒操作方面,获得/获得机会(RowSlice)比使用更通用的获取/固定操作更快。
template<class MatrixOut, class MatrixIn>
copy (MatrixOut& out, const MatrixIn& in)
{
if (in.isRowMatrix () && out.isRowMatrix ())
{
// row based copy
int rows = in.getNumRows ();
for (int y = 0; y < rows; ++y)
{
vectorCopy (out.getRowSlice (y), in.getRowSlice (y));
}
}
else if (in.isRowMatrix () && out.isRowMatrix ())
{
// column based copy
}
else
{
genericCopy (out, in);
}
}
目前的问题是,汇编者将产生错误,使RowSlice在ColumnMatrix失踪,在RawMatrix失踪。
如何专门实施? 这里的一个主要问题是,由于我有几个不同的罗·马塔基斯和哥伦·马西基斯执行工作(它们相互继承)。 因此,制作复制件和提件的比照;RowMatrix1, RowMatrix1>对于Mat Rowrix 执行和复制复制的不同组合而言;ColumnMatrix1, Columnrix2> 执行。 我不想为这些阶层创造遗产。 这也是我希望优化的算法之一。
我认为,使用C++海峡会有所助益,但我仍然有同样的错误。
template<bool a, bool b>
class MatrixTraits
{
static bool isRowMatrix () { return a; }
static bool isColumnMatrix () { return b; }
};
class RowMatrix
{
public:
typedef MatrixTraits<true, false> Traits;
...
};
class ColumnMatrix
{
public:
typedef MatrixTraits<false, true> Traits;
...
};
template<class MatrixOut, class MatrixIn>
copy (MatrixOut& out, const MatrixIn& in)
{
if (MatrixIn::Traits::isRowMatrix () && MatrixOut::Traits::isRowMatrix ())
{
// row based copy
...
}
else if (MatrixIn::Traits::isColumnMatrix () && MatrixOut::Traits::isColumnMatrix ())
{
// column based copy
}
else
{
genericCopy (out, in);
}
}
我仍然发现,Matrix一栏缺失。
谁能帮助? 感谢。