2
派生型を知らずに、派生ポインタを含むstd :: anyをベースポインタにキャストする方法はありますか?
std::any特定の基本クラスの派生クラスへのポインタを含む場合と含まない場合があるオブジェクトがあるとしますB。私ができることはありますか? 返しB *、あればstd::anyオブジェクトはコンバーチブル何かを保持するB *、または そうでない場合、例外をスローしますか? それはのように思えるdynamic_castし、std::any_castそれぞれが、この機能の半分を提供しますが、私は2つを一緒に入れてのいずれかの方法で表示されません。 に変換可能なすべての型を明示的に列挙することを含むさまざまな方法でこれを機能させることができることは知っていますがB *、それはすべてのDRY違反の母です。 使用例: std::vector<std::any> setupTools(const std::string & confFile) { std::vector<std::any> myTools; auto conf = parse(confFile); for(std::string & wrenchInfo : conf["Wrenches"]) { Wrench::setup(myTools, wrenchInfo); } for(std::string & hammerInfo : conf["Hammers"]) { Hammer::setup(myTools, hammerInfo); } // 25 more kinds of tools } Factory1::init(const std::vector<std::any> & tools) …