cgr*_*y14 3 c++ methods operator-overloading operators c++11
我似乎无法绕过它.该->操作员std::shared_ptr,只返回一个指向成员(让我们说这是一个类的实例),但在同一时间,它可以用来调用方法......怎么样?我们没有对->运算符返回的指针做任何事情.我们如何调用方法和访问实例变量?如果我有一些功能相同的东西,比如
T* Get() {
return &t;
}
Run Code Online (Sandbox Code Playgroud)
in std::shared_ptr(是的,我确实知道有一种get()方法),为什么我不写:
someSharedPtr.Get()SomeMethod()
Run Code Online (Sandbox Code Playgroud)
这基本上是什么
someSharedPtr->SomeMethod()
Run Code Online (Sandbox Code Playgroud)
正在做...我很困惑.如何返回指针替代类似->-> 或 operator->()->语法的东西?
Jon*_*ely 13
如何返回指针替代类似
->->或operator->()->语法的东西?
因为标准是这样说的.
13.5.6 [over.ref]定义了一个重载operator->到Do The Right Thing:
表达式
x->m被解释为类型为if(x.operator->())->m的类对象x,T如果T::operator->()操作符被重载决策机制选为最佳匹配函数(13.3).
如果它没有这样做,那么你就无法实现类似于指针的类型,并且具有通常的语义,x->m因为用户期望从类似指针的类型.因此语言说它就是它所做的,做其他任何事情都会使重载operator->变得不那么有用.
这实际上允许你将调用链接到operator->任意深度,如果你有类似指针的类型,返回类似指针的类型,返回类似指针的类型等,直到最后一些东西返回一个真正的指针.
| 归档时间: |
|
| 查看次数: |
265 次 |
| 最近记录: |