观看Sean Parent在"Base class of evil"上的谈话,我在工作中看了一些自己的代码和代码。当我尝试将肖恩父母的想法应用于他们时,我可以从我能看到的两个选项中留下。公开我的成员变量,或者只是将函数回调到类的成员变量。
void draw(const Foo &foo)
{
foo.draw();
}
// or
void draw(const Foo &foo)
{
// access foo's members to draw
}
我不喜欢其中任何一个的想法,一方面我暴露了那些不应该那么废弃的成员。而另一方面,我似乎已经创建了一大堆似乎只做间接的功能。这看起来有点乱。
现在我喜欢这个谈话并且一般都讨厌这些产生的结构,但是我不确定我能说服工作中的人们编写100个似乎应用间接的功能是值得的。
我错过了什么吗?
答案 0 :(得分:1)
您使用friend
。您正在实施一个概念上属于的外部函数,它完全合理地使用了该关键字,并且不会不恰当地暴露任何内容。
先生。家长使用friend
内联,我不知道是不可能的。他从来没有接触到它,所以我一开始并没有抓住它。我必须证明自己确实有效......
#include <stdio.h>
class Foo
{
public:
Foo() : val(5) {}
friend void draw(Foo const & a)
{ printf ("%d\n", a.val); } // You can implement friends inline?!
private:
int val;
};
int main (void)
{
Foo my_foo;
draw(my_foo);
return 0;
}