【问题标题】:C++ generic class, why do I need .cpp file?C++ 泛型类,为什么需要 .cpp 文件?
【发布时间】:2020-06-13 11:35:51
【问题描述】:

我希望在 C++11 中编写一个泛型类(例如:template <Class T>),但有人告诉我实现只能写在 .h 文件中。

另一方面,我应该提交一些.cpp 文件。有人可以解释一下矛盾吗? 如果所有定义和实现都需要在 .h 文件中,为什么我需要 .cpp

【问题讨论】:

  • A template 在实例化之前没有定义或实现。它更像是一种 C++ 语言的宏。 (或代码生成器。)您可以将成为定义一次实例化的部分拆分为 .cpp 文件,但必须在该翻译单元中显式实例化它才能链接到其他翻译隐式实例化模板的单元。否则,模板的那些部分不会被实例化,链接器也不会找到它们。这样做很麻烦。

标签: c++ class generics typedef


【解决方案1】:

您实际上根本不需要.cpp 文件,并且有很多仅标头库示例。

但是,为某些模板实例化提供.cpp 文件可能是有益的,因为这提供了发送另一个项目可以链接的二进制文件的机会。这样可以节省编译时间。

一个例子:

你的标题Foo.h

template<typename T>
class Foo {
  // some functions
};

如果 Foo 通常使用浮点类型进行实例化,您可以提供一个 Foo.cpp 包含例如

template class Foo<float>;
template class Foo<double>;
template class Foo<long double>;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
相关资源
最近更新 更多