【发布时间】:2012-12-12 18:54:53
【问题描述】:
我正在使用 ublas 作为我的矩阵代码,但我希望它是可交换的,所以我这样做了:
typedef boost::numeric::ublas::matrix<double> cMatrix;
今天,我需要将其中一些矩阵更改为有界大小,所以我也会有这个:
typedef boost::numeric::ublas::bounded_matrix<double, 3, 3> Matrix3d;
问题是我的旧函数声明:
void cClass::function(int param1,
int param2,
cMatrix ¶m3,
int param4);
不再有效。它给了我:
error : a reference of type "cMatrix &" (not const-qualified) cannot be initialized with a value of type "Matrix3d"
我设法通过将声明更改为:
template <class A>
void cClass::function(int param1,
int param2,
boost::numeric::ublas::matrix<double, boost::numeric::ublas::row_major, A> ¶m3,
int param4);
问题是我的定义是一个cpp文件,所以我必须在cpp中做这样的事情:
void dummyFunc()
{
cClass dummy(NULL, NULL);
cMatrix c;
Matrix12d d12;
dummy.function(-1, -1, c, -1);
dummy.function(-1, -1, d12, -1);
}
有什么方法可以避免使用 dummyFunc 或以其他方式泛化函数吗?
【问题讨论】:
-
那个虚拟函数的目的是什么?您是否尝试强制模板实例化,否则会出现链接器错误?
-
<stackoverflow.com/questions/2152002/…><comeaucomputing.com/techtalk/templates/#export>可能有用 -
我尝试为
template void cClass ::function(int param1, int param2, cMatrix &param3, int param4);template void cClass ::function(int param1, int param2, Matrix12d &param3, int param4);更改虚拟对象,但它继续给出链接器错误。
标签: c++ templates typedef boost-ublas