首页 > 解决方案 > 为什么标准库智能指针不重载`operator->*`?

问题描述

以下代码段无法编译,我想知道为什么会这样。

#include <memory>

struct Foo {
  int value;
};

int main() {
  auto ptr = std::make_unique<Foo>();
  auto member = &Foo::value;
  ptr->*member = 42;
  return ptr->*member;
}

为什么标准库中不包含以下(或写得更好的东西)?

template <typename Class, typename MemberPtr>
decltype(auto) operator->*(const std::unique_ptr<Class> &ptr, MemberPtr member) noexcept {
  return ptr.get()->*member;
}

标签: c++

解决方案


推荐阅读