マトリックスコードに 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 を実行したり、他の方法で関数を一般化したりするのを避ける方法はありますか?