邪恶的基础阶层

Base Class Of Evil -

本文关键字:阶层 邪恶      更新时间:2023-10-16

观看Sean Parent关于"邪恶基类"的演讲,我查看了一些自己的代码和工作中的代码。当我试图将Sean Parents的想法应用到他们身上时,我只能从我所看到的两个选择中选择。公开我的成员变量,或者只让函数回调到类的成员变量。

void draw(const Foo &foo)
{
   foo.draw();
}
// or
void draw(const Foo &foo)
{
   // access foo's members to draw
}

我不喜欢这两种想法,一方面,我暴露了一些成员,他们不应该真的这么废。另一方面,我似乎创建了一大堆函数,它们似乎只是做间接操作。看起来有点乱。

现在我喜欢这个演讲,通常也讨厌生成的这些结构,但我不确定我能不能说服工作中的人,写100个似乎只应用间接的函数是值得的。

我错过什么了吗?

您使用friend。您正在实现一个外部函数,该函数在概念上属于类,这是对关键字的完美合理使用,不会不适当地公开任何内容。

Mr。家长使用friend内联,我不知道这是可能的。他从来没有碰过它,所以我一开始没有抓住它。我必须向自己证明这确实有效。。。

#include <stdio.h>
class Foo 
{
  public:
    Foo() : val(5) {}
    friend void draw(Foo const & a)
    { printf ("%dn", a.val); } // You can implement friends inline?!
  private:
    int val;
};
int main (void)
{
  Foo my_foo;
  draw(my_foo);
  return 0;
}