如何强制实例化 C 模板的特定实例?

新手上路,请多包涵

见标题。我有一个模板。我想强制实例化模板的特定实例。我该怎么做呢?

更具体地说,你能强制一个抽象模板类实例化吗?


我可能会详细说明,因为我有同样的问题。就我而言,我正在构建一个库,一些模板实现很大并且包含很多东西,但只为几种类型生成。我想在库中编译它们并导出所有方法,但不要在任何地方都包含带有代码的标头。

IE:

 template<class T>
OS_EXPORT_DECL class MyTmpl
{
    T *item1;
public:
    inline T *simpleGetT() { return(item1); } /* small inline code in here */ }
    T *doSomeReallyBigMergeStuff(T *b); // note only declaration here
};

// *** implementation source file only seen inside library

template<class T>
MyTmpl<T>::doSomeReallyBigMergeStuff(T *b)
{
    ... a really big method, but don't want to duplicate it,
        so it is a template ...
}

我当然可以引用库中的所有方法,这将迫使它们编译和导出,但不希望向库中添加不需要的代码,例如项目的参数格式和调用它们的代码等。

???具体来说,我正在为多个版本的 MSC 和 GCC 以及 intel 编译器构建库。

原文由 anon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您不能强制泛型模板实例化,编译器只能在类型完全已知的情况下生成代码。

通过显式提供所有类型来强制实例化:

 template class std::vector<int>;

Comeaus 模板常见问题解答 详细介绍了相关问题。

原文由 Georg Fritzsche 发布,翻译遵循 CC BY-SA 4.0 许可协议

您还可以尝试显式实例化:

 template class vector<int>;                    // class
template int& vector<int>::operator[](int);    // member
template int convert<int,double>(double);      // function

原文由 Alexander Poluektov 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏