次の問題に直面しています:多数の シグナル変数をマップに保存したいです。boost::signals2
これらの信号はコピー不可であるため、これは明らかに機能しません。どうすればこれを回避できますか? 私はすでにこの古い質問を見つけました。その中で、ポスターは信号を として保存することを提案していshared_ptr
ます。これが唯一の方法ですか?欠点はありますか、それとももっと重要なことですが、安全ですか?
1576 次
3 に答える
2
一部のコメンテーターが指摘しているように、shared_ptrs
for シグナルの使用は完全に安全です。私の実装は機能し、その間に徹底的にテストされました。実際に問題がないことを報告できることをうれしく思います:)
于 2012-09-04T08:08:04.587 に答える
1
コピーも移動もできないため(最新のリビジョンで変更された可能性があります)。std::map の場合、shared_ptr を使用したくない場合は、key_value が存在しない場合、operator[] は mapped_type を構築するため、insert または emplace メソッドの代わりに operator[] を使用できます。以前に割り当てられたスロットに信号を追加したい場合、明らかに問題は解決しません。
typedef boost::signal2... Signal;
std::map<int, Signal> sigmap;
sigmap[1]; // constructs signal using default constructor
sigmap[2].connect(slot); // constructs signal and connects slot
于 2014-12-09T08:01:32.683 に答える