【发布时间】:2018-07-17 19:22:57
【问题描述】:
为了澄清英语中可能存在的优先级歧义:我们正在讨论“智能(指向成员的指针)”,而不是“指向成员的(智能指针)”。
我会将一个指向成员的智能指针定义为带有operator ->* (T* lhs, X rhs) 重载的类X。
在他的文章"Implementing operator->* for Smart Pointers" 中,Scott Meyers 只是简单地触及了 smart 指向成员的指针,因为当时(1999 年)具体问题对于 来说已经足够困难了raw 指向成员的指针(旁注:后者可以用 lambdas here 优雅地解决)。
无论如何,Scott Meyers 在脚注中写道:
在写完这篇文章的草稿后不久,我的一位顾问 客户向我展示了一个问题,该问题自然可以通过指向成员的智能指针来解决。我也很惊讶。
我试图为这种自然的指向成员的智能指针找到一个示例。 但我自己也想不出任何东西,在线搜索也没有找到我要找的东西。
你知道任何现实世界的“智能指针指向成员”的例子吗?
编辑:
我不是在寻找任何->* 过载(正如某些 EDSL 所做的那样)。
针对语义类似于内置->* 的示例,我上面的定义明确要求lhs 是一个原始指针。
【问题讨论】:
-
序言清晰明了。
-
cppreference 提到它是“.. 实际上被 boost.phoenix 中的演员以这种身份使用。它在诸如 cpp.react 之类的 EDSL 中更常见。”
-
如果我们只能问他的咨询客户;)
-
即使在 SO 上也是一个有趣的例子stackoverflow.com/q/23619152/8918119。但它们都不是真正的智能指针
-
在 cpp.react 示例中,
->*不用作通过指向成员的指针访问。他们只是在他们的 EDSL 中使用它,并且可以选择任何其他二元运算符。它与我的定义不符,因为lhs不是原始指针。
标签: c++ pointers operator-overloading operators smart-pointers