gpt4 book ai didi

c++ - 通过 if 语句在 odeint 中选择步进器

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:49 25 4
gpt4 key购买 nike

我想通过这样的 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>>;

然后你可以这样做:

DEMO

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.

但是虽然我不知道你项目的全部代码,但我想后面的代码不会像上面那样简单。如果我是你,我会将基础类 stepperBaseeulerrunge_kutta4 定义为 stepperBase 的继承。

关于c++ - 通过 if 语句在 odeint 中选择步进器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com