0

我有一个我不想破解的核心代码。在 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 中有一种方法可以做到这一点。

4

0 回答 0