c++ - 在 C++ 中覆盖调用者源文件中的函数

标签 c++

有一个名为 main.cpp 的 C++ 文件。

ma​​in.cpp

#include "addition.h"
#include <iostream>
int main(){
   int x=2;
   int y=3;
   std::cout<<getsum(x,y);
}

此文件包含名为 addition.h 的自定义头文件

加法.h

#include "my_adders.h"
namespace{
int getsum(int a,int b){
    return calculate_addition_h(a,b);
}
}

my_adders.h

#include <maths.h>
int calculate_addition_h(int p, int q){

      int sum=0;
      //Fn definitions
      return sum;
}

在main.cpp中, 我需要重写calculate_addition_h函数的定义。

可能吗?

我尝试复制calculate_addition_h定义以及main.cpp中的声明。然而,当我打印o/p时,调用了my_adders.h中的calculate_addition_h方法,而不是main.cpp中的方法。

请注意:我无法对addition.h 或my_adders.h 进行任何更改。

感谢任何帮助!

最佳答案

事实证明,无需更改任何 header 和预处理器魔法就可以实现!

由于您的 getsum 位于未命名命名空间中,因此您可以在未命名命名空间之前定义 calculate_addition_h 函数,包括addition.h:

ma​​in.cpp

namespace
{
    int calculate_addition_h(int p, int q)
    {
        return 666;
    }
}

#include "addition.h"
#include <iostream>
int main(){
    int x=2;
    int y=3;
    std::cout<<getsum(x,y);
}

在 C++ 中,同一命名空间中的函数优先于父命名空间中的函数。在这种情况下,父命名空间是全局命名空间。

关于c++ - 在 C++ 中覆盖调用者源文件中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22066829/

相关文章:

c++ - 重载新建和删除与自定义分配器

c++ - 是否有 high_resolution_clock 不是 typedef 的标准库实现?

android - 在 AudioFlinger 中捕获音频数据并保存到原始 PCM 文件

c++ - 选择排序数组

c++ - 如何最好地定义/构造/初始化 std::string 包装类

c++ - 具有 STL 算法和 std::execution::par 执行策略的迭代器

c++ - 您可以在命令行上使用 visual-c++ 静态链接特定库吗?

C++:在另一个函数中声明一个函数有什么用?

c++ - 将推断类型传递给 std::find_if lambda 函数

c++ - 使用 long double 但不使用 double 的未定义行为