C ++中嵌套函数的设计模式

时间:2012-11-10 12:00:53

标签: c++ design-patterns nested

我有两个A类,B。

对于A,我有两种方法callB()checksomethinginB()

对于B,我有一种方法execute()

我用它们像:

A _a;
_a.callB(); //inside the function, B object _b will be created

//after _b created, in another place, _b will execute _b.execute().
_b.execute()
{
   // I want to use A method checksomethinginB()
}

所以我不知道在B中使用A方法的好方法,我可以创建的是使用静态函数,但我认为可能有更好的方法,谢谢你的建议!!

3 个答案:

答案 0 :(得分:0)

A的正确实例传递给B的构造函数,或者在需要时传递它。

如果checksomethinginBA中不需要任何状态,那么它当然可以是静态的。

答案 1 :(得分:0)

如果没有查看课程详细信息并且没有解释您的课程实际执行的操作,您可以考虑以下选项:

  1. 如果A类和B类之间存在共性,您可以考虑从另一个中获得一个。除非有充分的理由而且不仅仅是为了让你做你想做的事情,否则不应该使用它
  2. 修改B:execute的函数签名以获取参数参数,该参数是A类的实例(或指向或引用A的实例),以便您可以调用A::checksomethinginB()
  3. 按照您的建议使函数保持静态 - 请记住,如果checksomethinginB()需要访问A的非静态成员变量,则无法执行此操作
  4. 可能有更好的选择,但如果没有关于类和功能要求的更多详细信息,则很难说

答案 2 :(得分:0)

我不确定您为什么要在class A class B中使用A::checksomethinginB()中的函数 - 我会将B::checksomething()移至A::checksomethinginB。从这里,我看到两个(+ 1)可能性:

  1. 如果B::checksomething / A未使用A中的任何州,那么您就完成了..
  2. 如果确实如此,那么它实际上在其代码中使用了A,所以你需要给他一个:可能会传递一个引用。
  3. 如果它只使用A::staticSomethingNotMentionedBefore的静态部分,您可以直接将它们与{{1}}一起使用。