基本クラスから派生したオブジェクトのリストだけの型がありたいと思います。つまり、発信者はStuff
またはMoreStuff
(Stuff
から派生したもの)のリストを取得し、少なくともスタッフのパートで動作することができます。派生型のブレースの初期化
これは私にstd::vector< std::unique_ptr<Stuff> >
のように聞こえる。しかし、私はブレースイニシャライザで初期化したいので、これは空白を描いています。
これは私がしようとしてる何より以下である:
#include <vector>
#include <memory>
#include <string>
struct Stuff {
std::string s1;
std::string s2;
};
using AllStuff = std::vector< std::unique_ptr<Stuff> >;
AllStuff const MyStuff = {
std::make_unique<Stuff>(Stuff{"1", "one"})
};
struct MoreStuff : public Stuff {
std::string s3;
};
AllStuff const AllMoreStuff = {
std::make_unique<Stuff>(MoreStuff{"2", "two", "too"})
};
か、というと、そのようなことを。 (ベクトルにさらにStuff
を追加するための)タイピングが少ないほど良いでしょう。
理論は、パラメータとしてAllStuff
又はAllMoreStuff
のいずれかへの参照を取り、そこからs1
とs2
を使用することができるであろう方法があるであろうことであろう。他の方法は、AllMoreStuff
しか使用せず、dynamic_cast<MoreStuff*>(...)
の適切な使用によってs3
を使用することができる。
しかし、理論と現実はまだあまり整理されておらず、派生したオブジェクトのリストをどのようにブレース初期化するかを決定する際の助けになります。