gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:57:36 27 4
gpt4 key购买 nike

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

看起来我的选择是:

  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/

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