相关疑难解决方法(0)

将typename关键字与模板函数参数一起使用

在C++中,typename需要关键字,因此编译器可以消除模板中嵌套类型和嵌套值之间的歧义.但是,在某些情况下,不存在歧义,例如派生类继承嵌套类类型时.

template <class T>
class Derived : public T::type
{ };
Run Code Online (Sandbox Code Playgroud)

这里typename关键字不是必需的,实际上甚至不允许.这是有道理的,因为上下文消除了歧义.在这里,T::type必须引用一个类型,因为你显然不能从一个值继承.

我认为同样的事情适用于函数模板参数.

template <class T>
void foo(const T::type& v)
{

}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,上下文清楚地表明T::type必须引用类型,因为函数参数不能是值.然而,编译器不接受这一点.它想要const typename T::type&.这似乎不一致.为什么语言允许在继承的上下文中隐式假设嵌套类型,而不是在函数参数的上下文中?在这两种情况下都不会有歧义,为什么需要typename一个而不是另一个呢?

c++ templates typename

28
推荐指数
2
解决办法
4473
查看次数

标签 统计

c++ ×1

templates ×1

typename ×1