私は少し行き詰まっていて、C++テンプレートの第一人者の助けが必要です。テンプレート構造体があります:
template<typename T, typename ID>
struct TypeMapping
{
T Type;
char* Name;
ID Id;
};
そして、このようないくつかのテンプレート関数:
template<typename T, typename ID>
bool TryGetTypeByNameImp(const TypeMapping<T, ID> map[], size_t mapSize,
const char* name, T& type)
{
for (size_t i = 0; i < mapSize; i++)
{
if (strcmp(map[i].Name, name) == 0)
{
type = map[i].Type;
return true;
}
}
return false;
}
マップ(最初のパラメーター)は次のように定義されます(同様のマップがいくつかあります)
namespace audio
{
const TypeMapping<Type, AMF_CODEC_ID> Map[] =
{
{AAC, "aac", AMF_CODEC_AAC},
{MP3, "mp3", AMF_CODEC_MP3},
{PCM, "pcm", AMF_CODEC_PCM_MULAW}
};
const size_t MapSize = sizeof(Map)/sizeof(Map[0]);
}
マップは引数として関数に渡され、次のサンプルのような関数を使用できるように、テンプレートパラメーターとしてマップを渡す方法を探しています。
audio::Type type;
bool r = TryGetTypeByNameImp<audio::Map>("aac", type);
私が見つけた唯一の解決策は、静的なMapとMapSizeを保持する構造体を定義し、その構造体をテンプレートパラメーターとして使用することですが、この解決策は好きではなく、別の解決策を探しています。誰かがこれを行う方法を知っていますか?