我想阻止特定模板类的所有隐式模板实例化,以防止它被实例化到每个翻译单元中。
看起来我的选择是:
- 在 gcc 的命令行上使用 -fno-implicit-templates。这个 抑制所有隐式模板实例化,这不是我想要的。我只想为单个模板阻止它。
- 使用 C++11“外部模板”。但这只会抑制特定的 显式实例化。我不想输入“外部 每个潜在模板参数的模板”行列出这个 模板可能会被实例化。
所以我需要介于两者之间的东西。最好有:
extern template class Foo; // suppress all implicit instantiations of Foo
(注意缺少模板参数。)有什么想法吗?
最佳答案
您可以使用 std::enable_if
,它与 std::is_same
的组合正是这样做的:
template <class T , typename = std::enable_if <!std::is_same<T,Foo>::value,T>::type >
class MyClass{
//...
};
现在 myClass 不会为 Foo
类型编译。
关于c++ - 如何防止特定模板的隐式模板实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30472564/