如何防止特定模板的隐式模板实例化?
我想阻止特定模板类的所有隐式模板实例化,以防止它被实例化到每个翻译单元中。
看起来我的选择是:
所以我需要中间的东西。 这将是很高兴有:
extern template class Foo; // suppress all implicit instantiations of Foo
(注意缺少模板参数。)任何想法?
您可以像使用非模板类一样拆分类。 只需将声明放入一个头文件中并将其包含到任意位置,然后将该实现文件放入一个.inl / .i文件中,并将其仅包含在您希望模板实例化的位置。 或者,使用编译时间开关来对单个文件执行此操作 - 但您必须将声明和实现分开。
你可以使用std::enable_if
,它与std::is_same
的组合std::is_same
:
template <class T , typename = std::enable_if <!std::is_same<T,Foo>::value,T>::type >
class MyClass{
//...
};
现在myClass不会被编译为Foo
类型。
我会说你的问题的答案是使用C ++新类型特征来断言你的构造函数中的实例:
static_assert(std::is_same<TInstantiation, [your-predefined-type]> || std::is_same<TInstantiation, [your-predefined-type2]> /*And so on...*/, "Classname can not be instantiated using this type!");
这一切都保证在编译时解决:)
链接地址: http://www.djcxy.com/p/26469.html上一篇: How do I prevent implicit template instantiations for a specific template?