我有一个我不想破解的核心代码。在 GitHub 的帮助下,C++ 中有大约 30 个对象进行了更新。
我的软件采用这段代码并实现了很多东西并改变了其他东西。如果此代码在另一个名称空间或文件夹中可用,我需要做的是以某种方式使用类和方法,否则使用原始代码。
此外,我无法更改核心(main 除外)。
我的目标是拥有一个具有相对性可维护性的有组织的代码结构。
例子:
#include <iostream>
namespace core {
class foo1 {
public:
static void fun1(){
std::cout << "fun1 from foo1 from core" << std::endl;
}
static void fun2(){
std::cout << "fun2 from foo1 from core" << std::endl;
}
};
class foo2 {
public:
static void fun3(){
std::cout << "fun3 from foo2 from core" << std::endl;
core::foo1::fun1();
}
};
};
namespace hack {
class foo1 {
public:
static void fun1(){
std::cout << "fun1 from foo1 from hack" << std::endl;
}
};
class foo2 {
public:
static void fun3(){
std::cout << "fun3 from foo2 from hack" << std::endl;
}
};
};
int main(void){
XXX::foo2::fun3();
XXX::foo1::fun2();
}
在此示例中,我希望链接器动态查找命名空间“hack”和类“foo2”中是否存在方法“fun3”,如果为真,请使用它,如果没有,请在命名空间“core”中尝试。“foo1”中的“fun2”也一样。
因此,输出应该是:
fun3 from foo2 from hack
fun2 from foo1 from core
请记住,我不想破解核心(也许只是主要功能),所有这些都在代码之外。这是某种拦截。我不知道要搜索什么。我尝试过的所有条款都没有得到任何结果。我也不知道是否可以使用多态性。另一个问题是编译器在文件中找不到某些方法,它可能会发现一些错误(对于命名空间hack中的被黑类)。我知道在 PHP 中有一种方法可以做到这一点。