我有一个模板化的结构,它使用模板特化(从https://www.justsoftwaresolutions.co.uk/articles/exprtype.pdf获取)将ID映射到一个类型。
template<int id>
struct IdToType
{};
template<>
struct IdToType<1>
{
typedef bool Type;
};
template<>
struct IdToType<2>
{
typedef char Type;
};
现在我想调用这样的函数 的getValue()
其中函数的返回值是ID的相应类型。
template</*.... I don't know what to put here...*/ T>
idToType<T>::Type getValue() // I don't know exactly how to define the return value
{
// whant to do some things with the provided ID and with the type of the id
}
简而言之: - 我想要一个模板化的函数,我可以使用ID作为模板参数。 - 函数需要将ID对应的类型作为返回值(我从IdToType :: Type中获取相应的类型)。 - 在函数体中,我想要访问ID和ID的类型。 - 我认为这应该可以使用模板模板参数。但我不确定。
我希望这很清楚...
提前致谢!
答案 0 :(得分:4)
template <int id>
typename IdToType<id>::Type getValue()
{
using T = typename IdToType<id>::Type;
return 65;
}
答案 1 :(得分:1)
此代码警告变量&#39; val&#39;没用了。但是既然我们不想用getValue()里面的类型做什么,我就这样离开了代码。
char getValueImpl(char)
{
return 'c';
}
bool getValueImpl(bool)
{
return true;
}
template<int X>
typename IdToType<X>::Type getValue()
{
typename IdToType<X>::Type val;
return getValueImpl(val);
}
int main()
{
std::cout << getValue<2>() << "\n";
std::cout << getValue<1>() << "\n";
}