我有点卡住了,需要 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;
}
map(第一个参数)定义为(有几个类似的map)
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]);
}
Map 作为参数传递给函数,我正在寻找如何将其作为模板参数传递,以便可以使用此示例中的函数:
audio::Type type;
bool r = TryGetTypeByNameImp<audio::Map>("aac", type);
我发现的唯一解决方案是定义一个包含静态 Map 和 MapSize 的结构并将该结构用作模板参数,但我不喜欢这个解决方案,我正在寻找另一个解决方案。有人知道怎么做这个吗?