C ++在多个项目中包含一个类

时间:2015-07-13 06:20:34

标签: c++ visual-studio-2010 class project

我想让一个类包含在我的所有项目中,这样当我进行更改时,它会更新该文件副本中的所有项目。

例如:

foo.h中

class foo
{
public:
    foo();
};

extern Foo* pFoo;

Foo.cpp中

Foo* pFoo;


foo::foo()
{
    printf("Foo\n");
}

的main.cpp

#include "foo.h"

int main(int argc, char* argv[])
{
    pFoo = new Foo();

    return 0;
}

如何干净地将“foo.h”包含在多个项目中而不会有任何麻烦?

2 个答案:

答案 0 :(得分:0)

首先,您不能只在多个项目中包含头文件;这些项目最终也必须与实施相关联。

有很多方法可以做到这一点;这取决于你想要的工作方式以及你的工具。

  1. 例如,如果你(并且你应该)使用源代码控制,一些源代码控制系统将允许你在项目之间共享文件(svn有外部文件,StarTeam有共享文件...... )。如果你这样做,每个项目在你检查时都会收到一份文件的副本,你可以在项目中正常构建它。

  2. 另一个选择是创建一个库。一旦选择了该选项,就必须做出另一种选择 - 静态库(.lib)或动态(.dll)。

  3. 两者都有优点和缺点。

    2.A。静态链接似乎更简单"并在此处回答您的基本需求 - 只需将此类编译到您的项目中。但是,静态链接有局限性。如果使用与将其链接到的项目不同的选项/设置构建静态库,则可能无效。如果您的所有项目(或其某个子集)的策略使用某组选项,那么这对您来说不是问题。

    要创建静态库,请创建静态库类型的visual studio项目。在构建时,它将运行图书管理员而不是运行链接器。

    2.b中。 DLL解决(大多数)不同编译器选项的问题(有一些因素可能影响DLL的使用,例如结构打包)。再次,您在Visual Studio的DLL类型中创建一个项目,它将为您构建DLL。

    然后,再次,你必须做出选择。将DLL链接到可执行文件时,必须选择动态或静态链接。要静态链接,在项目中包含一个.lib文件 - 它应该是用你的DLL创建的。如果你链接到这个.lib,程序将在它打开时查找并(尝试)加载它。

    最灵活,最复杂的方法是动态链接。为此,在您的代码中,您必须加载DLL并创建指向其中要使用的任何函数的指针。这可能是你所描述的问题的解决方案,并且我不确定如何访问类(而不是函数)。

    无论使用DLL的哪种方式,都必须将其与程序一起分发,并确保程序可以访问它(与可执行文件在同一文件中,在Windows DLL搜索路径中,或者,在本例中)在动态加载时,您可以专门指定路径,然后确保将DLL安装到该特定位置。)

    如果你可以管理一个静态库(2.a),它可以解决你提出的问题,因为静态库基本上是间接包含你项目中的类 - 它是你的代码的编译版本联。

    即使您创建了lib或dll,也必须在源代码控制中解决如何将其包含在不同项目中的问题。

答案 1 :(得分:-1)

单身人士怎么样?

class foo
{
    foo()
    {
        printf("foo\n") ;
    }
public:
    static foo &make(void)
    {
        static foo the_instance ;
        return the_istance ;
    }
};

这样你只有一个实例(这就是你想要的),你确定它在哪里&#39 ; s创建(这就是为什么constructore被声明为私有)。

现在,您可以将单个头文件中的整个cvlass包含在项目中,而无需进一步的需求。