动态创建typedef或更改函数返回类型

时间:2015-02-25 13:05:42

标签: c++

我正在使用dlib库进行非线性优化。我看了例子并编写了我的程序,例如。一切正常。这是代码示例:

    const int N = 9;
    typedef matrix<double,N,1> parameter_vector;
    parameter_vector residual_derivative{
      .....
     }

现在,我希望能够动态更改要优化的参数数量。我该怎么办?我知道无法动态创建typedef。我想做这样的事情(它不是编译)

class A{
      public:
      OptimizationWrapper(int N):N(N){
          typedef matrix<double,N,1> parameter_vector;
      }
      int N;
      parameter_vector residual_derivative{
      .....
      }
};

我发现只有一个解决方案。这是为了使'parameter_vector'大小小于优化参数的最大数量:

     typedef matrix<double,100,1> parameter_vector;
     int N;  //real number of parameters

然而,这种方法减慢了程序。还有其他解决方案吗?

2 个答案:

答案 0 :(得分:2)

您无法在运行时指定大小,仍然使用使用N的编译时构造来实例化模板。如果您希望在编译时执行此操作,则可以创建模板函数或类:

template<int N> matrix<double,N,1> residual_derivative(...) {...}

在运行时执行此操作的唯一方法是使用在运行时调整大小的类型。我不知道你正在使用哪个矩阵模板,但由于它似乎是一维的,也许你可以返回一个std::vector<double>

答案 1 :(得分:0)

matrix具有允许您在运行时设置大小的构造函数。打电话给其中一个去做。以下是一些例子:

matrix<double> mat(4,5); 
matrix<double,0,1> column_vect(6);