gpt4 book ai didi

c++ - 外部模板和不完整类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:22 25 4
gpt4 key购买 nike

最近,当我试图优化我的包含层次结构时,我偶然发现了文件 a.hpp :

template<class T>
class A
{
using t = typename T::a_t;
};

class B;

extern template class A<B>;

这似乎是错误的。事实上,最后的 extern 模板语句似乎导致了 A<B> 的实例化。这会导致编译器提示类型不完整。

我的目标是定义 A<B>a.cpp :

#include <b.hpp>
template class A<B>;

这样我就避免了必须包含 b.hpp来自 a.hpp这似乎是减少编译时间的好主意。但是它不起作用(a.hpp 本身无法编译!)有更好的方法吗?

注意:当然我可以不使用显式模板实例化,但这不是我想要的!我想“预编译”A<B>如果使用它可以节省编译时间,但如果 A<B>未使用 我不想包含 b.hpp在每个使用 a.hpp 的文件中!

最佳答案

extern 模板声明阻止了成员函数体的实例化,但它强制类定义的实例化,因为无论如何编译器都需要它,并且类体需要模板参数的完整定义,因为它访问它的成员。恐怕对 A<B> 的用户隐藏 B 的 body 不可能。

外部模板是一种优化,但它不会改变实例化机制的基本工作方式。

关于c++ - 外部模板和不完整类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34657294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com