这个问题是我们在开发引擎时遇到的。我们想拥有
template <typename T>
std::pair<const uint8_t*, size_t> get_resource()
{
return {nullptr, 0ull};
}
并且专门用于许多T
。重要的是,我们希望专业化工作在单独的源(.cpp
)文件中并被编译为引擎的静态库二进制文件。在源文件中放置专门技术至关重要,因为引擎的巨大代码库(至少几十万个LoC)的其他标头可能会经常更改这些功能。因此,如果它们驻留在头文件中,则可能会在更改一种专业的定义之一时导致重建项目的很大一部分。我找不到针对此类问题的帮助,因此在此发布我们的解决方案。
std :: pair
#include
使用模板定义定义标头存在。显然,c ++中没有办法进行declare
专业化。您可以执行的是为某些#include
强制实例化get_resource
模板(显然,无论如何我们都需要这样做,因为我们希望将专业化代码编译成库二进制文件)。这可以通过以下语法完成: