【发布时间】:2016-02-22 19:15:57
【问题描述】:
我无权访问此项目的 c++11。
我有一个 C++ 课程;让我们称它为 Bar,它看起来像这样:
头文件 FooBar.h:
#include "Fancy.h" // <--- Dependency
namespace Foo
{
template<typename T>
class Bar : public Fancy::FancyClass<T, ALLOCATER<HARD_CODED_VALUE>>
{
};
}
Cpp:
无
Fancy 是一个静态链接到 dll 的库。问题是当其他项目想要使用它们包含“FooBar.h”的 dll 时,它说它找不到“Fancy.h”
基本上,我希望包含 dll 的项目能够使用此类,而无需任何额外的库或头文件。
我的解决方案是把它放在一个 cpp 中并且没有头文件。不幸的是,没有什么可以找到它吗?我尝试创建一个也不起作用的空白头文件。
我试图在标题中转发声明它,但要做到这一点,我需要 .h 来了解 FancyClass 是什么。我也试过了
namespace Fancy
{
class FancyClass;
class ALLOCATER;
}
namespace Foo
{
template<typename T>
class Bar : public Fancy::FancyClass<T, ALLOCATER<HARD_CODED_VALUE>>;
}
在标题中。但这会导致很多错误。
【问题讨论】:
-
几乎您唯一的选择是将库包含路径添加到搜索路径或使用类似 PIMPL 模式的东西。我猜选择你的毒药。
-
你能限制一些T吗?
-
你不能。您的 Bar 取决于 Fancy,具体取决于用户提供的参数 T,因此用户需要查看 Fancy::FancyClass 定义。这里没有粉刺可以提供帮助。
-
不,T 必须是任何类。它是一个容器。
-
“我有一个 C++ 类;我们称之为 Bar”——不。 Bar 是一个模板,而不是一个类。这是制作课程的模式。
Bar<int>是一个类。