在调用代码中实例化模板时,必须可以访问模板类实现。因此,简单的解决方案是将类定义和实现放在单个头文件中。 当然,还有其他解决方案。 http://blog.ethanlim.net/2014/07/separate-c-template-headers-h-and.html中已经概括了我可以在Google上找到的解决方案 建议:
我见过其他人使用的第一个方法的变体,我自己使用的是为实现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 ++核心指南中找不到如何执行此操作的建议