组成构造函数从成员变量获取变量

时间:2019-01-30 06:10:30

标签: c++ odeint

我正在调用一个类(例如:B)作为另一个类(例如A)的参数。我想告诉B类从A类的成员变量中获取构造函数变量。

这是来自助推months = range(1,3) pieces=[] columns = ['id','q1','q2','q3'] for month in months: path = 'C:/Users/uib57309/Desktop/newfolder/01_Survey/month/%d.csv' %month frame = pd.read_csv(path, names = columns) frame['month'] = month pieces.append(frame) names = pd.concat(pieces) print(names) 的示例:

lib.h

odeint

lib.cpp

using namespace boost::numeric::odeint;

/* The type of container used to hold the state vector */
typedef vector<double> state_type;

/* The rhs of x' = f(x) defined as a class */
class harm_osc {
    double m_gam;
public:
    harm_osc( double gam ) : m_gam(gam) { }

    void operator() ( const state_type &x , state_type &dxdt , const double /* t */ )
    {
        dxdt[0] = x[1];
        dxdt[1] = -x[0] - m_gam*x[1];
    }
};
/*------------------------------------------------------------*/
class osc_solver {


    public:
    osc_solver(const harm_osc &ho) : m_ho(ho) {
        x = {1.0, 0.0}; // start at x=1.0, p=0.0

    }
    void run();

    private:
    harm_osc m_ho;
    state_type x;
    vector<state_type> x_vec;
    vector<double> times;
};

main.cpp

void osc_solver::run()
{
    size_t steps = integrate(m_ho,
                             x, 0.0, 10.0, 0.1,
                             push_back_state_and_time(x_vec, times));

    /* output */
    for (size_t i = 0; i <= steps; i++)
    {
        cout << times[i] << '\t' << x_vec[i][0] << '\t' << x_vec[i][1] << '\n';
    }
}

我需要这样的东西:

int main(int /* argc */ , char** /* argv */ )
{
    osc_solver sol(harm_osc(0.15));
    sol.run();
    return 0;
}

因为有时我需要将许多变量传递给我在两个变量中使用的类。

感谢任何指导。

1 个答案:

答案 0 :(得分:0)

您可以使用模板参数osc_solver定义HarmType类,该参数参数化成员osc_solver::m_ho的类型,并通过转发{{1}的构造函数的参数来构造它}。 像

osc_solver

然后,例如,您可以将#include <utility> template <class HarmType> class osc_solver { public: template <class... ArgsType> osc_solver(ArgsType&&... parameters_ham) : m_ho(std::forward<ArgsType>(parameters_harm)...) { x = {1.0, 0.0}; // start at x=1.0, p=0.0 } void run(); private: HarmType m_ho; state_type x; vector<state_type> x_vec; vector<double> times; }; 的对象用作

osc_solver

更一般地说,您可以定义// harm_osc needs 1 parameter in the constructor osc_solver<harm_osc> solver(0.15); // harm_osc_special needs 2 parameters in the constructor osc_solver<harm_osc_special> solver(0.15, 0.2); 以要求同时使用类osc_solver::osc_solver和构造osc_solver中使用的两个参数,例如:

osc_solver:m_ho