我无权访问此项目的c++ 11。

我有一个C++类。我们称之为Bar,看起来像这样:

header FooBar.h:

#include "Fancy.h" // <--- Dependency
namespace Foo
{
    template<typename T>
    class Bar : public Fancy::FancyClass<T, ALLOCATER<HARD_CODED_VALUE>>
    {
    };
}

Cpp:

没有

花式是一个静态链接到dll的库。问题是,当其他项目要使用dll时,它们包含“FooBar.h”,它表示找不到“FancyBar.h”。

基本上,我希望包含dll的项目能够使用此类而无需任何其他库或 header 。

我的解决方案是将其放在cpp中,并且没有头文件。不幸的是什么也找不到呢?我尝试创建一个空白的头文件,该文件也不起作用。

我试图转发在 header 中声明它,但是要做到这一点,我需要.h来了解什么是FancyClass。我也尝试过
namespace Fancy
{
    class FancyClass;
    class ALLOCATER;
}

namespace Foo
{
    template<typename T>
    class Bar : public Fancy::FancyClass<T, ALLOCATER<HARD_CODED_VALUE>>;
}

在标题中。但这会导致许多错误。

最佳答案

简短的答案,您必须在可执行文件中包含 header 才能使用提供的库。

较长的答案,编译器需要知道库中定义的类的结构。

想象一下,有一个名为MyAwesomeClass的类是您要在可执行文件中使用的库的一部分。当您说MyAwesomeClass awesome;时,编译器对该类一无所知。它有多大?您可以调用什么方法?它从任何东西继承吗?

此信息包含在声明该类的头文件中。

class MyAwesomeClass
{
    private:
        std::string _name;
    public:
        MyAwesomeClass();
        MyAwesomeClass(const std::string& name);
        void print_name();
};

实现是在DLL或静态库中定义的,但是使用MyAwesomeClass类型时,编译器至少需要知道其结构。如果不包含 header ,编译器将抱怨它不知道MyAwesomeClass是什么类型(即undefined class错误)。

关于c++ - 仅C++实现模板类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35561958/

10-14 18:28
查看更多