我对decltype
函数的类型感到困惑。它既不是函数指针也不是函子。我该如何使用它?以及为什么这里的完整模板专业化不需要const
限定符。
class SomeClass
{
public:
template <typename T>
void insideTemplateMethod(const T & value)
{
}
};
template
void SomeClass::insideTemplateMethod<decltype(std::hex)>(decltype(std::hex) & ); // no need to specify const
template
void SomeClass::insideTemplateMethod<int>(int &); // error, must specify const
int main(void)
{}
如果我删除&
,它会抱怨
error: template-id 'insideTemplateMethod<std::ios_base&(std::ios_base&)>' for 'void SomeClass::insideTemplateMethod(std::ios_base& (*)(std::ios_base&))' does not match any template declaration"
看,decltype(std::hex)
in 参数字段被扣除到std::ios_base& (*)(std::ios_base&)
,而它被扣除到std::ios_base&(std::ios_base&)
模板的参数中。
你能帮我理解吗?