我有一个名为getId()
的模板函数,可以像这样使用:getId< SomeType >()
和getId< Some< NestedType >>()
。我必须以某种方式区分它们。
template<typename TRequest>
ParameterId getId() // #1
{
return tEParameterId_None;
}
template<template <class> class TRequest, class TType>
ParameterId getId() // #2
{
return TType::paramId;
}
template<TRequest<TType>>
ParameterId getId() // #3, not working
{
return TType::paramId;
}
ParameterId none = getId<SomeType>(); // #1 will be called
ParameterId still_none = getId<Some<NestedType>>(); // #1 will be called, but I want #3
ParameterId some_other = getId<SomeType, NestedType>(); // #2 will be called
我的问题是,如何指定#3
getId()
模板函数,使getId< Some < NestedType > >()
精确调用第三个变体?或者说,我可以使用哪种编译时模板魔法来区分嵌套的模板?因为在整个代码中,像
Some< NestedType >
这样的符号被用到了,而我不想更改它,并像getId< SomeType, NestedType >()
一样调用 - 这将是不一致的。