在c ++中调用没有括号的类方法

时间:2014-11-10 10:51:44

标签: c++ oop stl

一些c ++ STL容器提供了像

这样的getter
Foo.first

Foo.second

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

这样的方法
Matrix.components

Matrix.size

而不是

Matrix.components()

Matrix.size()

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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