当前位置: 首页 > 知识库问答 >
问题:

如果两个重载函数相似,如何做出更好的设计

陶瀚玥
2023-03-14

我正在研究一个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
            }
        }
    }
}

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

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

共有1个答案

宦正诚
2023-03-14

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

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});
 类似资料:
  • 问题内容: 如何找到向量之间的余弦相似度? 我需要找到相似性来衡量两行文本之间的相关性。 例如,我有两个句子: 用户界面系统 用户界面机 …及其在tF-idf之后的向量,然后使用LSI进行标准化,例如 和。 如何测量这些向量之间的相似性? 问题答案: 我最近在大学的信息检索部门做了一些tf-idf的工作。我使用了这种余弦相似度方法,该方法使用Jama:Java Matrix Package 。 有

  •   如下图所示 点击 E立方管理平台 -->选项… ,出现界面后选择其它后,如下图: 在这里,选择想要的个性化设置功能,进行设置。

  • 下面的代码通过使用特征向量作为容器或简单的C数组来实现相同的计算。它产生一个封闭的但不是位到位等效的结果。 最后的数学运算是。

  • 如果我在a[n]中有一个数组

  • 问题内容: 如何查询相似度排序的记录? 例如。搜索“库存溢出”将返回 堆栈溢出 SharePoint溢出 数学溢出 政治溢出 视觉特效溢出 例如。搜索“ LO”将返回: 巴勃罗毕加索 米开朗基罗 杰克逊·波洛克 我需要什么帮助: 使用搜索引擎索引和搜索MySQL表,以获得更好的结果 使用Sphinx搜索引擎和PHP 在PHP中使用Lucene引擎 使用全文索引,查找相似/包含的字符串 什么不好 L

  • 问题内容: 经典(非js)重载方法: Javascript不允许使用同一个名称定义多个功能。这样,这样的事情就会出现: 除了传递带有重载的对象之外,JavaScript中是否有更好的解决方法来实现函数重载? 传递重载会很快导致函数变得过于冗长,因为每个可能的重载都需要一个条件语句。使用函数来完成那些条件语句的内部会导致带有范围的棘手情况。 问题答案: Javascript中的参数重载有多个方面: