gpt4 book ai didi

c++ - 由于 if 语句 c++11 而避免重复代码的不便

转载 作者:行者123 更新时间:2023-11-27 23:51:08 25 4
gpt4 key购买 nike

我想避免在这个用例中重复代码

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() 中都存在重复代码(检查 b)除了 if 里面的调用(注意 if 条件是一样的)。我认为这个 if 在某种程度上不方便提取新方法,但我也认为可以使用 lambda 和/或模板来完成。对于此用例如何实现 A1()A2() 没有兴趣。

我的问题:避免这种代码重复的最好和最简单的方法是什么?

最佳答案

您可以编写一个函数,它接受指向要执行的成员的指针

class B : public A {
private:
const char *a;
using F = void(A::*)(const void* const, const std::streamsize) const;
void RunFun(F f, const char *b) {
if (!b) {
return;
}
if (a < b) {
(this->*f)(a, b-a);
}

}


void B1(const char *b) {
RunFun(&B::A1,b);
}

void B2(const char *b) {
RunFun(&B::A2,b);
}
};

关于c++ - 由于 if 语句 c++11 而避免重复代码的不便,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46377178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com