【发布时间】:2019-12-02 20:56:21
【问题描述】:
我对 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)被扣除为std::ios_base& (*)(std::ios_base&),而模板的参数中被扣除为std::ios_base&(std::ios_base&)。
你能帮我理解一下吗?
【问题讨论】:
-
函数是不可变的,因此函数指针的 const 是多余的。
标签: c++ templates metaprogramming template-specialization explicit-specialization