可执行程序覆盖方法

问题描述 投票:0回答:1

我创建了一个可执行文件,链接到一个static库。 但我想创建另一个程序,它可以更改此库中定义的 1 个方法的行为,而无需重新编译。我无法使用 LD_PRELOAD,因为它不是共享库。

例如:

  1. App1
    ->
    StaticLib1
    void DoSmth() { ... original behavior ... }

  2. Lib2
    (静态或动态):
    void DoSmth() { ... override behavior... }

  3. App2
    :启动
    App1
    并导致调用
    Lib2
    中的方法而不是
    StaticLib1

有什么想法如何实施吗?可以吗?

平台:Linux

c++ linux static-libraries lib
1个回答
0
投票

要能够跨多个库覆盖相同的类方法,您需要实现的关键是确保默认实现是虚拟的,然后后续子类覆盖默认实现

假设你有app.h

class App { virtual void DoSmth(){ // Default }};

然后在您想要更改默认实现的库中,例如 app2.h

class App2 : public App { void DoSmth() override { // Overridden }};

如何调用它取决于您,但只要您的类以这种方式链接,那么您就可以像这样调用默认方法或重写方法

App* app = new App();

App* app2 = new App2();

应用程序->DoSmth();

app2->DoSmth();

© www.soinside.com 2019 - 2024. All rights reserved.