【发布时间】:2017-04-09 11:10:33
【问题描述】:
背景:
我目前在 Visual Studio 中构建了一个游戏引擎项目,以便将我的“引擎”编译为 dll,供另一个项目“游戏”使用。我的想法是我可以换出不同的游戏项目并仍然使用相同的引擎 dll 代码。在我的引擎代码中,我正在创建自己的框架,所有其他引擎代码都将使用该框架。这将有助于将我的实现与我的其余代码分开,并在需要时使修改更容易。
由于我的所有框架代码都在 dll 本身中使用,而不是在“游戏”中使用,我认为我可以实现模板。但是,每当我尝试使用引擎框架实现模板时,我仍然会收到“未定义符号”错误。
问题:
有没有办法从我的 dll 中的链接器中绕过模板的“未定义符号”错误,而不必explicitly define 我的模板将使用的每种类型(例如class template MyClass<int>、class template MyClass<float> 等) ?如果没有,对于我可以实现引擎和不同游戏项目以保持灵活性的不同方式有什么建议吗?感谢您的任何意见。
附:我不想显式定义模板类可以使用的所有类型,因为如果我想创建自己的向量模板类(因为我必须定义很多不同的类),那会变得相当大。
【问题讨论】:
-
我相信显式导出模板的实例化是将所有代码都放在头文件中的解决方法。一种比这更简洁的方法(例如,SFML 使用的方法)是让模板头只包含声明,然后在底部 #include 类似于定义实现的 .inl 文件。然后它全部在包含文件中,但标题本身对用户来说是干净的。
标签: c++ templates dll game-engine undefined-symbol