如果两个重载函数相似,如何进行更好的设计
How to make a better design if two overload functions are similar
我正在做一个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++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法对C++中的三个整数进行排序?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 哪个版本(调试/发行 - 未取代/优化)更好地研究C 与组件进行比较
- 有没有比具有多个维度的容器更好的解决方案来进行复杂的数据管理?
- 在对 MFC 应用程序进行编程之前还是之后创建附属 dll 更好
- 更好的std::在指针集合上查找,并将取消引用的值与常量引用值进行比较
- 如果两个重载函数相似,如何进行更好的设计
- 对 2 个"linked"数组进行排序的更好方法?