在 ODEINT 中通过 if 语句选择步进器
choose stepper in odeint through if statement
我想通过这样的if语句选择集成方案:
//stepper_type steppr; ??
if (integration_scheme == "euler") {
[auto] stepper = euler<state_type>{};
}
else
{
[auto] stepper = runge_kutta4<state_type>{};
}
但步进器仅在大括号内有效。 在 if 语句之前要定义的步进器类型是什么? 另一种方法是将积分方案(甚至步进器(作为参数传递给函数。
在 C++17 及以上版本中,为此目的,我们可以按如下方式应用std::variant
:
#include <variant>
class state_type {};
template<class T>
class euler {};
template<class T>
class runge_kutta4 {};
template<class T>
using stepper_t = std::variant<euler<T>, runge_kutta4<T>>;
然后你可以这样做:
演示
stepper_t<state_type> stepper;
if (integration_scheme == "euler") {
stepper = euler<state_type>{};
}
else{
stepper = runge_kutta4<state_type>{};
}
std::cout << stepper.index(); // prints 0.
但是,尽管我不知道您项目的整个代码,但我认为上述后续代码不会简单。 如果我是你,我会将基础小牛stepperBase
和euler
和runge_kutta4
定义为stepperBase
的继承。
相关文章:
- Switch 语句(字符串)一直选择默认值,除非其为零
- 是否可以在C++中使用三元运算符在 if 语句中选择比较运算符?
- 在 ODEINT 中通过 if 语句选择步进器
- 何时使用 if 语句选择多个循环而不是单个循环
- 执行默认值:在C 中的开关案例选择语句中
- 如何防止在 switch 语句中多次选择同一选项/值
- 以一种方式使用字符串选择(如果语句)
- C++17 : "带初始值设定项的选择语句"是否损坏?
- 如何在C 中结合两个选择语句
- C++选择语句返回 true
- 选择在 Sqlite 数据库中有效,但插入和更新语句不起作用
- 使用条件语句在运行时选择不同的模板化矩阵类
- 使用if语句选择类型来声明变量C++
- 如何使用选择语句检索 sqlite 并分配给向量然后分配给字符串
- C++ Sqlite 选择语句并存储为向量
- 没有选择语句的C++条件
- 如果选择了上面的if语句,那么Will else就是resolve
- 如何在开关语句中选择值范围
- 我如何让一个输入语句重复,直到用户选择的字段数完成
- 我想能够使用4个不同的变量在一个选择语句在c++