C++ 在本例中,`typename`的含义是什么?
我正在研究C++ 在本例中,`typename`的含义是什么?,c++,templates,C++,Templates,我正在研究binder1st的一个示例实现,它如下所示: template <class Operation, class T> binder1st<Operation> bind1st (const Operation& op, const T& x) { return binder1st<Operation>(op, typename Operation::first_argument_type(x)); } 模板 binder1
binder1st
的一个示例实现,它如下所示:
template <class Operation, class T>
binder1st<Operation> bind1st (const Operation& op, const T& x)
{
return binder1st<Operation>(op, typename Operation::first_argument_type(x));
}
模板
binder1st bind1st(常数操作和操作,常数T和x)
{
返回binder1st(op,typename操作::第一个参数类型(x));
}
typename操作::第一个参数\u type(x)
的含义是什么。我认为第一个参数类型
是一个类型名,但属于二进制函数
基类。在我看来,它是属于名称空间操作的函数
——在这种情况下,为什么这里使用typename
?这意味着typename
关键字后面的限定名(即操作::第一个参数类型
)将被解释为(依赖)类型的名称
您可以阅读关键字
typename
(它还有另一种不同用法)的完整解释。在此上下文中,是否将x
转换为类型操作::第一个参数\u type
?否,正在调用操作::第一个参数\u类型
构造函数,该构造函数采用常量&
参数。稍微偏离主题,请阅读此处,因为它可能会很有趣。例如,我会编写typename操作::first_argument_type((x)),只是为了安全起见,它不是一个函数,而是一个转换为类型操作::first_argument_type
的函数样式。函数样式转换与Stefano下面描述的相同吗(采用常量T&
的Operation::first_argument_type
的构造函数?@BeeBand Yes,函数样式转换正在调用构造函数。@BeeBand Yes,但取决于确切的类型,适当的T::operator type()
也可以调用。好的,很好,我只是想知道这个强制转换的目的是什么-似乎这是为了在编译期间验证操作
的嵌套类型定义为第一个参数类型
。