我正在使用 Eigen 线性代数库(链接)中的模板化 Matrix 类。Matrix 类采用三个名义模板参数:
Matrix<type, rows, cols>
在上面,type
是double
或的一个例子std::complex<double>
。此外,rows
是行cols
数, 是 Matrix 中的列数。
如下面的代码所示,我想做的是在运行时使用条件语句使用不同的模板化 Matrix 类。
想到的第一个解决方案可能是使用 void 指针。
#include <iostream>
#include <Eigen/Dense>
#include <complex>
using namespace Eigen;
int main()
{
// this flag is set at run-time, but it is only set here
// in the code as an example
int create_complex = 1;
void *M;
if(create_complex)
{
Matrix<std::complex<double>,3,3> m0;
M = &m0;
}
else
{
Matrix<double,3,3> m0;
M = &m0;
}
// de-reference pointer here and use it
return 0;
}
尽管此代码可以编译,但void *M
需要在使用前显式取消引用该指针。这很不方便,因为我必须为相同的程序逻辑编写不同的代码块。
我想知道这里是否可以应用类似于多态性的东西,我不必使用 void 指针。