gpt4 book ai didi

c++ - 外部模板不适用于 gcc?

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:21 24 4
gpt4 key购买 nike

C++11 引入了一个名为“外部模板”的特性,它表示模板实例存在于其他翻译单元中。(我说得对吗?)

这个(http://www.youtube.com/watch?v=3annCCTx35o)讲座还说如果你指定extern模板并且不包含实例化,链接器会产生错误。(视频中大约2:25)

所以,我尝试构建下一个代码:

#include <iostream>

template<class T>
struct Foo
{
static constexpr int type_size = sizeof(T);
};

extern template struct Foo<int>;

int main()
{
std::cout<< Foo<int>::type_size << std::endl;
return 0;
}

我预计构建会失败,因为该文件不包含显式实例化或专门化,但 gcc 只是构建它,结果运行良好。

我错过了什么?或者,我误会了什么吗?或者,gcc 不支持 extern 模板吗?

更新

我尝试了一个带有非内联函数的类,extern 模板按预期工作!

#include <iostream>

template<class T>
struct Foo
{
static void print(T t);
};

template<class T>
void Foo<T>::print(T t) { std::cout << t << std::endl; }

extern template struct Foo<int>;

// template struct Foo<int>;

int main()
{
Foo<int>::print(1);
return 0;
}

如果没有注释行,则不会构建以上源代码。谢谢大家!

最佳答案

if you specify extern template and don't include instantiation, the linker will produce error.

不,不一定。只有当您实际使用 模板时才会出现问题。您正在使用定义为该模板的静态成员的编译时常量,但它在编译时被常量的值替换。并且在替换之后,不再使用模板,因此不需要定义模板。

关于c++ - 外部模板不适用于 gcc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23633255/

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