【问题标题】:Which style would be better when two functions have the same content in c/c++?c/c++中两个函数内容相同时,哪种风格更好?
【发布时间】:2014-03-03 10:55:13
【问题描述】:

假设你有一个基类:

class base  
{  
public:  
  virtual void OnConnect() = 0;  
  virtual void OnDisonnect() = 0;  

  // Other functions ...  
};  

有几个类继承自基类,其中大多数对这两个函数有不同的实现。但是,其中一个派生类具有相同的内容,我想知道以下哪种样式更好,为什么:

(A) 在两个函数中保留重复的代码

void derived::OnConnect(const char* err)
{  
    /*  
     * 3~5 lines of code in this function with a block of comment.
     */
}

void derived::OnDisconnect(const char* err)
{  
    /*  
     * 3~5 lines of code in this function with a block of comment.
     */
}

(B) 将一个委托给另一个

void derived::OnConnect(const char* err)
{  
    /*  
     * 3~5 lines of code in this function with a block of comment.
     */
}

void derived::OnDisconnect(const char* err)
{  
    // Same as OnConnect()
    OnConnect(err);
}

(C) 定义另一个函数并在 OnConnect/OnDisconnect 中调用该函数

static func(const char* err)
{
    /*  
     * 3~5 lines of code in this function with a block of comment.
     */
}

void derived::OnConnect(const char* err)
{  
    func(err);
}

void derived::OnDisconnect(const char* err)
{  
    func(err);
}

哪个更好?

【问题讨论】:

  • 注意:这不是c,所以你不需要那个标签。而且没有c/c++ 语言。
  • 我会选择选项 (C),特别是如果函数名称告诉阅读代码的人它实际上做了什么。
  • 为什么func不是选项C中的类方法?
  • 我会选择替代 C,因为它以最清晰的方式表达了意图(即连接和断开连接是不同的事件,但它们需要执行相同的操作)并且您将为极有可能发生的事件是您想在其中做某事而不想在另一件事中做。
  • 纳布拉是对的。它应该是一个私有成员函数。

标签: c++ coding-style


【解决方案1】:

由于这两个函数接口中没有任何内容表明一个应该与另一个有任何关系,我认为我们可以安全地排除选项 B。

我个人会选择选项 C。

【讨论】:

    【解决方案2】:

    永远不要剪切和粘贴代码,或者至少避免尽可能。 Cut & Past 很快变得无法维护。所以忘记选项(A)。

    我会选择解决方案 (C),因为在 (B) 中,因为它在逻辑上对我来说更有意义:调用连接的断开连接函数?

    【讨论】:

    • 这个问题很讽刺,如果不清楚,很抱歉:我肯定会选择(C)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2016-06-11
    相关资源
    最近更新 更多