SystemC (システム モデリング用の C++ ライブラリ) を使用してシステムのモデルを作成しようとしています。Server
私のデザインは、 、Environment
、People
オブジェクト、の 3 つの主要部分で構成されていますRobots
。環境とサーバーの両方が、システム内のすべてのロボットにアクセスする必要があります。私の最初のアイデアは、 オブジェクトのベクトルをとオブジェクト (それぞれのコンストラクターに渡される) のRobot
両方に保持することでした。ただし、ベクター クラスでは、オブジェクトに既定のコンストラクターが必要です。SystemC の性質上、各モジュールには名前が必要なため、「モジュール」にはデフォルトのコンストラクターがありません。さらに、私は渡す必要がありますServer
Environment
Robot
ベクター。これに対する一般的な解決策は、ポインタのベクトルを使用し、次に示すようにコンストラクタからベクトルを初期化することです。ただし、Robot
モジュールは、コンストラクターで追加のパラメーターも受け取る必要があります。だから私は本当にこのトリックをネストすることはできません. 誰かがこのジレンマの解決策を提供してくれれば幸いです。
簡潔にするために、すべてのモジュールが同じ問題に苦しんでいるため、Server
とのコードのみを投稿します。Robot
ある場所で修正できれば、他の場所も従うはずです。
server.h
#ifndef SERVER_H_
#define SERVER_H_
#include <vector>
#include <systemc.h>
#include "Person.h"
#include "Robot.h"
SC_MODULE (Server)
{
public:
sc_in<bool> clk;
SC_HAS_PROCESS(Server);
Server(sc_module_name name_, std::vector<Robot> robots);
void prc_server();
};
#endif /* SERVER_H_ */
サーバー.cpp
#include "Server.h"
Server::Server(sc_module_name name_, std::vector<Robot> robots) : sc_module(name_)
{
SC_METHOD(prc_server);
sensitive << clk.pos();
}
void Server::prc_server()
{
}
robot.h
#ifndef ROBOT_H_
#define ROBOT_H_
#include <vector>
#include <systemc.h>
#define ROBOT_SPEED 0.1
SC_MODULE (Robot)
{
private:
std::vector<unsigned> path;
public:
sc_in<bool> clk; // system clock
sc_in<bool> canMove; // true = safe to move
sc_in<unsigned> position; // current position
sc_out<bool> arrived; // true = arrived at next position
SC_HAS_PROCESS(Robot);
Robot(sc_module_name name_, std::vector<unsigned> path);
void prc_robot();
};
#endif /* ROBOT_H_ */
ロボット.cpp
#include "Robot.h"
Robot::Robot(sc_module_name name_, std::vector<unsigned> path) : sc_module(name_)
{
this->path = path;
SC_METHOD(prc_robot);
sensitive<<clk.pos();
}
void Robot::prc_robot()
{
}
コンパイラの出力は次のとおりです(文字数をオーバーランしたため、ペーストビンに入れました)