必要な情報が色々と抜けていたのに、色々と情報をいただきありがとうございます。
私が考えていたのは実行時に型を登録するようなクラスを使う方法です。
仮コードですが下記のような感じです。
template<typename BaseType> class InheritanceContainer{
struct IInheritance{
// BaseTypeを継承したクラスを生成
virtual BaseType* Create() const = 0;
};
template<typename Type> struct Inheritance : public IInheritance{
virtual BaseType* Create() const{ return static_cast<BaseType*>( new Type() ); }
};
public:
// 型情報の登録
template<typename Type> bool Add(){
std::unordered_map<std::string, IInheritance*>::iterator it = m_InheritanceMap.find( ctti::nameof<Type>().cppstring() ); // ctti::nameof<Type>().cppstring() cttiライブラリーを利用して型の文字列を取得する
if( it != m_InheritanceMap.end() ) return;
m_InheritanceMap.insert( std::make_pair( ctti::nameof<Type>().cppstring(), new Inheritance<Type>() ) );
}
// 文字列に合わせた BaseType を継承した物を生成
BaseType* Create( const std::string& _TypeText ){
std::unordered_map<std::string, IInheritance*>::iterator it = m_InheritanceMap.find( _TypeText );
return it != m_InheritanceMap.end() ? it->second->Create() : NULL;
}
private:
std::unordered_map<std::string, IInheritance*> m_InheritanceMap;
};
一応これでも要件は満たしているのですが、
いかんせんこれだと使うクラスを予め手動で登録している必要があり、
保守管理が手間なので皆様のお知恵を拝借できればと思い質問した次第です。
頂いた情報はこれから勉強します。
C++相談室 part144
レス数が900を超えています。1000を超えると表示できなくなるよ。
901882です。
2019/09/08(日) 21:55:34.48ID:8BL9REycレス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 地 震 [KingFisherは魚じゃないよ★]
- 【W杯】日本はF組2位で3大会連続決勝T進出 1回戦で王国ブラジルと激突 スウェーデンと1-1ドロー ★6 [恐縮です★]
- 【W杯】日本はF組2位で3大会連続決勝T進出 1回戦で王国ブラジルと激突 スウェーデンと1-1ドロー ★7 [恐縮です★]
- 「福岡県」→「福岡府」に変更検討を 副首都構想めぐり県議会が国に要望 [煮卵★]
- 【東京】ポルシェで交差点を約100キロで右折し多重事故 運転の中国籍の男を逮捕 文京区 [ぐれ★]
- 【W杯】中村敬斗vs主審 短いソックスを注意される→見ていない間に再び下げる→後半履き替える ふくらはぎ付近には大きな穴も [ネギうどん★]
- 【地上波/DAZNほか】 FIFAワールドカップ2026 総合スレ★199【メキシコ/カナダ/アメリカ】
- 【地上波/DAZNほか】 FIFAワールドカップ2026 総合スレ★200【メキシコ/カナダ/アメリカ】
- 【DAZN専用】日本-スウェーデン ★1
- 【マターリ】日本vs端典
- こいせん 全レス転載禁止
- とらせん
- 地震 [509448172]
- 地震
- 【悲報】高市、母親が警察官だった設定も嘘だった疑惑が浮上🫪これもう恐怖だろ… [359965264]
- マッスル北村💪😅💪🏡
- 【訃報】日経平均株価、大幅マイナス、3600円 [943688309]
- 地震