在单独的文件中实现C ++模板类的建议和IDE支持

时间:2019-02-22 17:58:28

标签: c++ templates ide

在调用代码中实例化模板时,必须可以访问模板类实现。因此,简单的解决方案是将类定义和实现放在单个头文件中。 当然,还有其他解决方案。 http://blog.ethanlim.net/2014/07/separate-c-template-headers-h-and.html中已经概括了我可以在Google上找到的解决方案 建议:

  • 所有实现都放入头文件
  • 实施中的显式模板实例化(* .cpp)

我见过其他人使用的第一个方法的变体,我自己使用的是为实现myTemplateClass_impl.h创建一个头文件,该头文件包含在另一个头myTemplateClass.h中。 我一直以为这是推荐的方法,但是用Google搜索时,我很惊讶我找不到任何地方描述的这种技术。现在,我对这种技术有一个问题:因为myTemplateClass_impl.h不是自包含的,所以它破坏了vscode intellisense(或其他IDE C ++支持)。

现在有一种使它对IDE友好的方法,但是有点令人费解:

myTemplateClass.h

#ifndef MYTMPCL_IMPL_H
#define MYTMPCL_IMPL_H
#include "myTemplateClass.h"
namespace tmpcl {
    // implementation
  template <typename T> TmpCL::...

} // namespace tmpcl

#endif // MYTMPCL_IMPL_H

myTemplateClass_impl.h

comparison = df == df.shift()
df['flag'] = comparison['Date'] & comparison['Name'] & comparison['Activity']]

现在,包括两个文件中的哪个都没有关系。它们都扩展为相同的代码,而vscode intellisense很高兴。 这样的设计好吗?

谢谢。

让我感到惊讶的是,我在https://isocpp.org/的C ++核心指南中找不到如何执行此操作的建议

0 个答案:

没有答案