如果两个过载功能相似,如何做出更好的设计 [英] How to make a better design if two overload functions are similar
本文介绍了如果两个过载功能相似,如何做出更好的设计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在开发一个c ++项目,我有一个例子如下:
I'm working on a c++ project and I have a case as below:
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
}
}
}
}
如你所见,我有两个重载功能。
他们的逻辑结构是一样的,但是一些细节不是。
As you see, I have two overloading functions.
Their logical structures are the same but some details are not.
我考虑到是否有一些可以合并它们的技术,以便我可以有更好的设计。因为现在我必须改变两次,如果我需要做一些改变。
I'm considering if there is some technique which can merge them so that I can have a better design. Because for now I have to change two times if I need to do some change.
推荐答案
你可以使用模板,做一些像这个:
You can use templates and do something like this:
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
}
}
}
}
然后调用您的函数,如下所示:
Then call your function as it follows:
func(0, 0, generateInt2);
// or
func(0, 0, convertStrToInt, std::string{0});
这篇关于如果两个过载功能相似,如何做出更好的设计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文