1

我正在阅读类型擦除:

Andrzej 的 C++ 博客类型擦除 — 第一部分

我在哪里遇到以下文字:

除非您可以提前枚举模板的所有实例,否则您必须在头文件中包含每个函数模板的主体,您不能将声明与实现分开

枚举模板的所有实例化是否与回答以下问题时指出的显式实例化相同?

为什么模板只能在头文件中实现?

另一种解决方案是保持实现分离,并显式实例化您需要的所有模板实例:

// Foo.h

// no implementation
template <typename T> struct Foo { ... };

//----------------------------------------    
// Foo.cpp

// implementation of Foo's methods

// explicit instantiations
template class Foo<int>;
template class Foo<float>;
// You will only be able to use Foo with int or float
4

1 回答 1

0

大部分是的。

它归结为“你能知道它在哪里被使用吗?”。std::vector<T> can't know all the types Twill beplaced 的作者。

这就是“枚举所有实例化”步骤,然后是“写下所有显式实例化”。

于 2019-07-30T08:46:00.497 回答