我有一个类型,它的方法可以通过
SomeTrait::<T>::method()但我不明白这和
<SomeTrait<T>>::method()在C++中,我希望这样做:
SomeTrait<T>::method()这两个不一样吗?他们两人似乎都把<T>专门化称为method on SomeTrait。
发布于 2019-12-02 15:24:46
C++语法不能使用,因为它是Rust中的一个模糊语法:在SomeTrait<T>::method()中,第一个<是小于运算符,还是泛型参数列表的开头?
您所引用的两个方法用于消除这方面的歧义:
<SomeTrait<T>>被称为完全限定语法SomeTrait::<T>被称为涡轮鱼符号(非官方名称)。发布于 2019-12-02 15:20:00
SomeTrait::<T>::method()和<SomeTrait<T>>::method()在锈蚀中是一样的。
只是风格上的选择。
发布于 2019-12-03 16:29:37
C++语法不明确。
解析C++中最大的挑战之一是能够区分使用<作为小于运算符或模板参数列表的开头。
大多数情况下,编译器通过“欺骗”来隐藏复杂性,C++解析器执行符号查找,以确定<左侧的任何内容是否是模板结构/方法。
在某些情况下,这种复杂性会显现出来;在模板中,在符号种类不明确的情况下,必须使用template关键字来区分:
foo.template get<T>()生锈语法倾向于LL(1)
事后看来,这是Rust开发人员非常希望避免的一次黑客攻击。
因此,Rust中的相同表达式将为:foo.get::<T>()。
为了保持一致性,对Foo::<T>::method()类型应用了相同的语法。
https://stackoverflow.com/questions/59140724
复制相似问题