【问题标题】:Call class method without parentheses in c++在c ++中调用不带括号的类方法
【发布时间】:2014-11-10 10:51:43
【问题描述】:

一些 c++ STL 容器提供类似的 getter

Foo.first

Foo.second

除了非常实用之外,还提高了代码的可读性。现在假设我想在我自己的一个类中重现该功能。是否可以定义类似的方法

Matrix.components

Matrix.size

而不是

Matrix.components()

Matrix.size()

(相同但没有括号)?怎么可能实现?

【问题讨论】:

标签: c++ oop stl


【解决方案1】:

不,因为这是您在 C++ 中访问公共成员变量的方式。

您所引用的容器必须是 std::pair,并且是通过这种方式访问​​的它的公共成员变量(对的两个元素),即数据而不是函数。

对于您的矩阵,要么制作这些成员变量(但这对于封装来说是个坏主意),要么将它们保留为函数(就像标准库中的许多容器一样)。

【讨论】:

  • 好的。因此在数据封装和代码可读性(烦人的括号)之间存在折衷。
  • @Alejandro 这不是妥协。这只是语法问题。括号并不烦人,它们表示一个函数。函数与成员变量完全不同,对吧?所以我们不要用相同的语法混淆这两个不同的概念。 (就像最令人烦恼的解析已经出现了这种情况)。
【解决方案2】:

.first.second 成员是数据,而不是代码。因此,“调用”它们是没有意义的。您的方法不是数据,它们是代码,因此您必须使用() 调用它们。请注意,.size() 是所有 STL 容器上的方法,而不是数据成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2015-08-25
    相关资源
    最近更新 更多