【发布时间】:2021-11-11 10:16:09
【问题描述】:
我有以下代码,我想知道如何解决 33-38 和 47-52 行的重复问题。 struct X 有 2 个具有相同签名的方法,Y 有一个 X 的实例,并且有 2 个方法必须使用相同的回调,该回调必须为 X 中的方法捕获相同的值。
#include <iostream>
#include <functional>
using namespace std;
struct X
{
void func(std::function<void(int)>f, int x)
{
f(x);
}
void func2(std::function<void(int)>f, int x)
{
f(x);
}
};
struct Y
{
void doSomething_1()
{
int x = 10;
bool called = false;
x_.func(
[&x, &called](int xx) // line 33
{ // line 34
called = true; // line 35
x++; // line 36
xx++; // line 37
} // line 38
, 20);
}
void doSomething_2()
{
int x = 10;
bool called = false;
x_.func2(
[&x, &called](int xx) // line 47
{ // line 48
called = true; // line 49
x++; // line 50
xx++; // line 51
} // line 52
, 20);
}
X x_;
};
int main()
{
Y y;
y.doSomething_1();
y.doSomething_2();
return 0;
}
【问题讨论】:
-
一开始为什么会有重复的代码?不需要重复的功能。
-
33-38 和 47-52 被 SONAR 标记为重复
标签: c++ duplicates c++14