私はこの記事のタイトルに示したようMQTTトピックに一定の低音クラスをリンクするマップを作成しようとしていますタイトル。はSTDに値を設定することはできません::マップ<はstd ::文字列、のstd :: shared_ptrの<class>>
私は生の(Cスタイル)のポインタでの作業持っているが、私は学校で学んだようにスマートポインタは、より良い設計オプションになります。
マップをインスタンス化するときに問題は発生しませんが、マップにデータを割り当てる必要があります。
私はそれが完璧に働い持っ方法は、次のとおりです。このコードは、「センサー」で
std::map<std::string,sensors*> factory;
factory["sensorTwo"]= new sensor1;
はSENSOR1の基底クラスです。
私はこのようにそれをやろう:
std::map<std::string,std::shared_ptr<sensors>> factory;
factory["sensorOne"]= std::make_shared<sensors> (sensor1);
コンパイラは前に一次式を求めます「;」 2行目に。 最初の例の割り当ては明らかにshared_ptrでは機能しませんが、これを行う方法について誰かが知っていますか?
主なルックスを次のように
次のように構造Foo
と
Bar
を宣言して考えると
#include <string>
#include <memory>
#include <map>
#include "sensors.h"
#include "sensor1.h"
#include "sensor2.h"
int main()
{
//std::map<std::string,sensors*> factory;
std::map<std::string,std::shared_ptr<sensors>> factory;
factory["sensorOne"]= std::make_shared<sensor1>();
return 0;
}
(http://coliru.stacked-crooked.com/a/5a3e115f04392bc2)[再現することはできません]。 [mcve]を入力してください。 – NathanOliver
あなたの3つの '* .h'ファイルに何が入っているのかわからない場合、' main'を見ることはあまり役に立ちません。 –
MQTTは説明できません。役に立たない(削除する必要があります)、または説明が必要です。 – Yakk