私のプログラムは構成ファイルから読み取り、毎回2つの特定のセクションの内容でいくつかのクラスをインスタンス化します。
クラスを初期化するVoice
には、次のように呼び出します。
initializeDomain ("voice", voice_config, voice_config_fields);
Voice
次のように初期化する必要があります。
Voice voice ( config, config_fields );
そのために、次の関数をプログラムしました。
void initializeDomain (string dom, map<string, string> & config, map<string, string> & config_fields)
{
if ( dom == "voice" ) {
Voice voice ( config, config_fields );
return voice;
} else if ( dom == "account" ) {
Account account (config, config_fields);
return account;
}
}
インスタンス化されるクラスに応じて戻り型が可変であるため、これは明らかに機能していません。そこで、このニーズに対応できるテンプレートを作成しようとしました。
template <typename T>
T initializeDomain (string dom, map<string, string> & config, map<string, string> & config_fields)
{
if ( dom == "voice" ) {
T instantiated ( config, config_fields );
} else if ( dom == "account" ) {
T instantiated ( config, config_fields );
}
return instantiated; }
}
しかし、それも機能しません。テンプレートでさまざまなクラスをインスタンス化するにはどうすればよいですか?