【发布时间】:2023-04-03 13:54:01
【问题描述】:
我想在这个用例中避免重复代码
class A {
protected:
virtual void A1(const void* const s, const std::streamsize n) const;
inline void A2(const void* const s, const std::streamsize n) const;
};
class B : public A {
private:
const char *a;
void B1(const char *b) {
if (!b) {
return;
}
if (a < b) {
A1(a, b-a);
}
}
void B2(const char *b) {
if (!b) {
return;
}
if (a < b) {
A2(a, b-a);
};
}
};
所以,正如您在上面的B1() 和B2() 中看到的那样,除了 if 内部的调用(注意 if 条件相同)之外,存在重复的代码(检查 b)。我认为这if使提取新方法有些不便,但我认为可以使用 lambdas 和/或模板来完成。对于此用例如何实现 A1() 和 A2() 没有任何意义。
我的问题:避免这种代码重复的最好和最简单的方法是什么?
【问题讨论】:
-
将重复的代码分离到另一个函数中。
-
我编辑了帖子,我认为不应该将
b的条件移到另一个函数中。 -
那你在烦恼什么?并非所有简单语句的代码重复都需要(并且应该)避免。
-
好吧,如果可以轻松完成,为什么不呢?
-
假设
a是一个指针,a < b要求b为非NULL,因此您可以完全删除您的第一个if语句。除此之外,您是否应该以某种方式合并或模板化函数取决于它们的作用以及您希望界面是什么样的。
标签: c++ c++11 code-duplication