gpt4 book ai didi

c++ - 如何更好地设计两个重载函数相似

转载 作者:太空狗 更新时间:2023-10-29 20:54:03 25 4
gpt4 key购买 nike

我正在做一个 C++ 项目,我有一个案例如下:

void func(int a, int b)
{
if (some_bool)
{
generateString(generateFunc()); // different
}
for (auto it : myVector)
{
// do something
for (int i = 0; i < a + b; ++i)
{
if (some_bool2)
{
myData = generateInt();
}
else
{
myData2 = generateInt2(); // different
}
}
}
}


void func(int a, int b, string str)
{
if (some_bool)
{
generateString(generateFunc(str)); // different
}
for (auto it : myVector)
{
// do something
for (int i = 0; i < a + b; ++i)
{
if (some_bool2)
{
myData = generateInt();
}
else
{
myData2 = convertStrToInt(str); //different
}
}
}
}

如你所见,我有两个重载函数。
它们的逻辑结构相同,但有些细节不同。

我正在考虑是否有某种技术可以合并它们,以便我可以有更好的设计。因为现在如果我需要做一些改变,我必须改变两次。

最佳答案

您可以使用模板并执行如下操作:

template<typename F, typename... A>
void func(int a, int b, F &&f, A&&... a)
{
if (some_bool)
{
generateString(generateFunc(std::forward<A>(a)...)); // different
}
for (auto it : myVector)
{
// do something
for (int i = 0; i < a + b; ++i)
{
if (some_bool2)
{
myData = generateInt();
}
else
{
myData2 = std::forward<F>(f)(std::forward<A>(a)...); //different
}
}
}
}

然后按如下方式调用您的函数:

func(0, 0, generateInt2);

// or

func(0, 0, convertStrToInt, std::string{0});

关于c++ - 如何更好地设计两个重载函数相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557225/

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