c++ - 具有可变数量参数的派生类

标签 c++ function derived-class

我的项目(C++11 使用 Visual Studio 2013 for Windows)中有这个特定的类结构,由一个基础实验类和许多实验(来自基础实验类的派生类)组成。每个实验都有不同数量的参数(4 到 12 个参数)。在每个实验中,用户为参数提供某些初始值,并为收集的数据点(大约 100 个点)提供一组独特的方程来优化这些参数。现在用户可以选择告诉程序应该固定而不是优化特定参数。例如,experiment#1有7个参数,用户可以选择Para​​meter#1和Parameter#5固定,其余需要优化。

class Experiment1:public BaseExperiment{
public:
       Experiment1(){}
       virtual ~Experiment1(){}

private:
       double parameter2, parameter3, parameter4, parameter6, parameter7;
}

class Experiment1Case1: public Experiment1{
public:
       Experiment1Case1(double x, double y)
       : x_(x), y_(y) {}

       template <typename T> bool operator()(const T* const parameter2, const T* const parameter3, const T* const parameter4, const T* const parameter6, const T* const parameter7, T* residual) const{
      // equation relating all parameters
  residual[0] = - T(y) + parameter2[0] + parameter3[0] *    sin(parameter6[0])/ parameter1Fixed; //long equation here
            return true;
        }

        void setparameter1(double initialParameter1) { parameter1Fixed = initialparameter1; }
        void setparameter5(double initialParameter5) { parameter5Fixed = initialparameter5; }

private:
   const double x_;
   const double y_;
   double parameter1Fixed, parameter5Fixed;
};

在我的主程序中,根据用户固定的参数,我必须使用不固定的参数数量调用特定函数。所以对于上面的这个例子,如果用户固定参数 1 和参数 5 那么代码将是:

for (size_t i = 0; i < data1.size(); ++i) {
     Experiment1Case1 *exp1C1 = new Experiment1Case1(data1[i], data2[i]);
     exp1C1->setparameter1(20.0);
     exp1C1->setparameter5(290.0);
     problem.AddResidualBlock(new AutoDiffCostFunction<Experiment1Case1, 1, 1, 1, 1, 1, 1,>(exp1C1), NULL, &parameter2, &parameter3, &parameter4, &parameter6, &parameter7);
}

因此基于用户固定的参数,所以 7 个参数(2 次方 7)即 128 种组合。现在我的问题是:有没有一种方法可以提供此选项并避免为特定实验声明 128 个不同的派生类该项目有 n 个实验。

任何想法将不胜感激。谢谢。

最佳答案

只有100分?

只需制作一个包含 100 个选定固定参数拷贝的数组,然后运行优化。 优点是您可以对所有优化使用相同的函数。

关于c++ - 具有可变数量参数的派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39185610/

相关文章:

c++ - 内存泄漏在哪里?二维数组类

c++ - 如何正确管理句柄?

python - 如何使用递归编写 all_subsets 函数?

c++ - 为什么为派生类定义拷贝构造函数要求定义基类的默认构造函数?

c++ - 扭矩 3D 建筑模板项目产生 "nfd.h file not found"错误是 VS2013

c++ - Unix 用户空间中的实时 IPC

javascript - Trigger.io:函数中的 forge.prefs 变量作用域

c - 为什么我要在 C 中按值传递函数参数?

c# - 自定义(派生)List<T>

c++ - 检查派生类的数据成员