有一个名为 main.cpp 的 C++ 文件。
main.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:
main.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/