相关疑难解决方法(0)

函数模板特化的显式实例化

我正在尝试创建一个专门用于某些给定类型的全局函数模板。它看起来像这样:

(主模板,模板特化,extern)

template <typename T> void foo() { std::cout << "default stuff" << std::endl; }
template<> void foo<int>() { std::cout << "int stuff" << std::endl; }
extern template void foo<int>();
Run Code Online (Sandbox Code Playgroud)

A.cpp(显式实例化)

template void foo<int>();
Run Code Online (Sandbox Code Playgroud)

void bar();
Run Code Online (Sandbox Code Playgroud)

B.cpp(包括啊)

 void bar() { foo<int>(); }
Run Code Online (Sandbox Code Playgroud)

主程序

foo<int>();
bar();
Run Code Online (Sandbox Code Playgroud)

编译器让我崩溃:“'void foo()' 的多个定义。我认为 extern 应该处理这个问题。B 编译单元不应该实例化 foo,而是在链接时使用 A 实例化,没有? 我哪里错了?

请注意,如果我不专门化 foo,则代码编译得很好。函数特化和实例化之间是否存在某种冲突?

c++ templates explicit instantiation specialization

4
推荐指数
1
解决办法
2197
查看次数

标签 统计

c++ ×1

explicit ×1

instantiation ×1

specialization ×1

templates ×1