c++ - 如何防止特定模板的隐式模板实例化?

标签 c++ templates c++11

我想阻止特定模板类的所有隐式模板实例化,以防止它被实例化到每个翻译单元中。

看起来我的选择是:

  1. 在 gcc 的命令行上使用 -fno-implicit-templates。这个 抑制所有隐式模板实例化,这不是我想要的。我只想为单个模板阻止它。
  2. 使用 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/

相关文章:

c++ - 如何确定代码在内核空间中花费大量时间的位置(系统调用)

c++ - 枚举权限(本地安全策略)

c++ - 在 c++14 lambda 表达式中捕获和移动 unique_ptr

c++ - 在编译时完全枚举 D 维数组的索引

c++ - 为什么在 C++20 之前 std::swap 没有标记为 constexpr ?

c++ - 启用 C++11 时如何修复 'wrong number of template arguments''?

c++ - GCC: template previously defined 错误

c++ - 行为处理列表和标量实体的通用打印函数?

c++ - std::function 模板参数中的 const

c++ - 递归模板不能像预期的那样使用静态变量