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

标签 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

但是这种方法会减慢程序速度。还有其他解决方案吗?

最佳答案

您不能在运行时指定大小并仍然使用使用 N 的编译时构造实例化一个模板。如果你想在编译时做,你可以创建一个模板函数或类:

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

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

关于c++ - 动态创建 typedef 或更改函数返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28719788/

相关文章:

c++ - 为通过 Nuget 安装的 C++ 库设置链接类型

c++ - 如何从 FindFirstFile() 获取多种文件类型是可能的吗?

c++ - WinAPI - 从 DLL 加载资源

c++ - 哪些库对 std::make_shared 使用了 "We Know Where You Live"优化?

类对象数组中的 C++ 内存

c++ - wxWidgets 2.8 中的 wxBusyInfo 替代方案

c++ - 使用 XPDF(或其他工具)编辑 PDF

关于字符的 C++ 初学者问题

c++ - 如何用C++读取Windows默认网关IP地址

c++ - 如何链接到共享库的旧版本