【发布时间】:2020-04-13 23:28:29
【问题描述】:
我有一个实现类和一个包装类,我想通过结构取消引用(->)操作符的包装类访问实现类实例。到目前为止,没问题。
class Implementation
{
public:
doSomething();
}
class Wrapper
{
public:
Implementation* operator->() {
return _implPtr.get();
}
private:
std::shared_ptr<Implementation> _implPtr;
}
当我像下面这样使用它时它会起作用:
Wrapper wrapper;
wrapper->doSomething();
但是当我使用带有 unique_ptr 的包装类时,编译器会抛出错误:
auto wrapper = std::make_unique<Wrapper>();
wrapper->doSomething();
错误是“'class Wrapper' 没有名为 'doSomething' 的成员”。
在这种情况下如何访问实现类?
【问题讨论】:
-
_implPtr->get();-- 不应该是_implPtr.get();吗? -
你不能。
unique_ptr增加了一个间接——设计使然!出于同样的原因,您的代码也不适用于Wrapper*对象。使用(*wrapper)->doSomething。 -
显示的代码显然不是编译错误的真实代码,所以任何关于编译错误原因的猜测都无非是猜测,随机猜测。
-
@PaulMcKenzie 是的,我总结时的错误
-
@SamVarshavchik 我不能分享真正的代码,因为真正的类很大,我不允许分享它们
标签: c++ smart-pointers dereference