基地 Class 邪恶 -
Base Class Of Evil -
看着 Sean Parent 在 "Base class of evil" 上的演讲,我看了一些自己的代码和工作中的代码。当我尝试将 Sean Parents 的想法应用到他们身上时,我只剩下两个选择。公开我的成员变量,或者只是让函数回调到 class 的成员变量。
void draw(const Foo &foo)
{
foo.draw();
}
// or
void draw(const Foo &foo)
{
// access foo's members to draw
}
我不喜欢其中任何一个的想法,一方面,我暴露了那些不应该真正废弃那个的成员。另一方面,我似乎已经创建了一大堆似乎只是间接调用的函数。好像有点乱。
现在我喜欢这个演讲,并且通常讨厌这些生成的结构,但我不确定我能否说服工作中的人,让他们相信编写 100 个似乎只是应用间接的函数是值得的。
我是不是漏掉了什么?
您使用friend
。您正在实现一个外部函数,该函数在概念上 属于 到 class,这是对关键字的完美使用,不会不适当地公开任何内容。
先生Parent 使用 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;
}
看着 Sean Parent 在 "Base class of evil" 上的演讲,我看了一些自己的代码和工作中的代码。当我尝试将 Sean Parents 的想法应用到他们身上时,我只剩下两个选择。公开我的成员变量,或者只是让函数回调到 class 的成员变量。
void draw(const Foo &foo)
{
foo.draw();
}
// or
void draw(const Foo &foo)
{
// access foo's members to draw
}
我不喜欢其中任何一个的想法,一方面,我暴露了那些不应该真正废弃那个的成员。另一方面,我似乎已经创建了一大堆似乎只是间接调用的函数。好像有点乱。
现在我喜欢这个演讲,并且通常讨厌这些生成的结构,但我不确定我能否说服工作中的人,让他们相信编写 100 个似乎只是应用间接的函数是值得的。
我是不是漏掉了什么?
您使用friend
。您正在实现一个外部函数,该函数在概念上 属于 到 class,这是对关键字的完美使用,不会不适当地公开任何内容。
先生Parent 使用 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;
}