如何将c++可执行代码扩展到不同的代码层(例如产品代码、解决方案代码)

How to extend C++ executable to different layers of code (e.g. product code, solution code)?

本文关键字:代码 解决方案 c++ 可执行 扩展到      更新时间:2023-10-16

我试图开发一个可执行文件,它在产品级别具有标准功能,在解决方案级别具有额外的自定义功能。

我在产品层面写了A类,在解决方案层面写了由A类衍生的B类。两个级别都有Init()函数,如果可执行文件是从解决方案级别构建的,我想调用类B的Init()函数。还要注意main函数位于产品层。

我的代码如下;


产品水平


产品级A.h

#include <iostream>
#define App A::GetInstance()
class A
{
public:
    A(int priority = 1);
    virtual ~A(){}
    virtual void Init() { printf("Called Class A function n"); }
    static A& GetInstance() { return *_instance;}
private:
    static A* _instance;
    static int _priority;
};

A.cpp在产品层面

#include "A.h"
A* A::_instance = new A();
int A::_priority = 0;
A::A(int priority)
{
    if (priority > _priority)
    {
        _instance = this; 
        _priority = priority;   
    } 
}

main.cpp在产品层面

#include "A.h"
int main(int argc, char** argv)
{
    App.Init();
    return 0;
}

解决方案水平


B.h在解决方案水平

#include "A.h"
class B : public A
{
public:
    B(int priority = 2);
    virtual ~B(){}
    virtual void Init() { printf("Called Class B function n"); }
};

b.p p在解决方案级别

#include "B.h"
B* b = new B();
B::B(int priority):A(priority)
{ 
}
我的问题是?

    而不是全局对象有一个更好的方法来做到这一点?
  1. 另外,如果我改变目标文件的制作顺序,那么使用相同的代码产生不同的输出?有办法克服这个吗?

    a.) g++ -o test a. cpp B.cpp main.cpp

    。/测试 -------> 输出——>调用类函数

    b.) g++ -o test b. cpp A.cpp main.cpp

    。/测试 -------> 输出——>被称为B类函数

  2. 我的实现是n个级别的理想方法吗?(例如,从其他解决方案构建的解决方案)

这一行需要修改成这样;

A* A::_instance = new A();

A* A::_instance;
A* a = new A();

当你使用

给A::_instance分配新的实例时
A* A::_instance = new A();

将覆盖B的构造函数赋值。因此,您可以通过删除对_instance的直接赋值来避免它。构造函数会这样做。