我如何在源文件中对模板功能进行专业化?

问题描述 投票:0回答:1

这个问题是我们在开发引擎时遇到的。我们想拥有

template <typename T>
std::pair<const uint8_t*, size_t> get_resource()
{
    return {nullptr, 0ull};
}

并且专门用于许多T。重要的是,我们希望专业化工作在单独的源(.cpp)文件中并被编译为引擎的静态库二进制文件。在源文件中放置专门技术至关重要,因为引擎的巨大代码库(至少几十万个LoC)的其他标头可能会经常更改这些功能。因此,如果它们驻留在头文件中,则可能会在更改一种专业的定义之一时导致重建项目的很大一部分。我找不到针对此类问题的帮助,因此在此发布我们的解决方案。

这个问题是我们在开发引擎时遇到的。我们要有模板

std :: pair get_resource(){return {nullptr,0ull}; }和...

c++ templates template-specialization specialization
1个回答
1
投票
首先:将功能模板专业化放置在源文件中没有问题,因为-在进行专门化时-它与其他功能一样。棘手的是让源#include使用模板定义定义标头存在。显然,c ++中没有办法进行

declare

专业化。您可以执行的是为某些#include强制实例化get_resource模板(显然,无论如何我们都需要这样做,因为我们希望将专业化代码编译成库二进制文件)。这可以通过以下语法完成:
© www.soinside.com 2019 - 2024. All rights reserved.