单独.cpp文件中的模板类专用化
Template class specialization in seperate .cpp file
我在foo.h
中有以下模板类专业化:
using VisionMethod = enum
{
TemplateMatching,
...
};
template <VisionMethod>
class Foo
{
Foo() = delete;
};
template <>
class Foo<TemplateMatching>
{
public:
static void get_pose();
};
并希望在CCD_ 2中实现为:
#include "foo.h"
void
Foo<TemplateMatching>::get_pose()
{
std::cout << "Using foo<TemplateMatching>::get_pose()...n";
}
但是,当我试图在例如main.cpp
中仅包含foo.h
之后调用foo<TemplateMatching>::get_pose()
时,我(在某种程度上可以理解(遇到了链接器错误。我可以实现我想要的吗,而不必在foo.h
或main.cpp
中包含foo.cpp
——也许可以使用显式实例化?或者像foo.txx
这样的东西是我唯一的";"干净";解决方案
您提出的建议已经有效(在添加#include <iostream>
之后(,您可能忘记告诉编译器包含foo.cpp
。
如g++ main.cpp foo.cpp
https://wandbox.org/permlink/LDpxhgeYPkakWFwE
为了在main.cpp
中使用它,您需要在foo.h
中定义您的专用函数(即您在foo.cpp
中放入的函数(
据我所知,这是无法逃脱的规则。但是,如果您想将头文件和实现分开以使项目更干净,一个非常常见的解决方案是将实现放在一个单独的文件中(我通常将其扩展名为.inl(,并将其包含在头文件的末尾。这样,从人类的角度来看,它看起来像是头/impl分离,但编译器仍然可以在其头文件中包含所有内容。此文件不是编译目标,因此不必为其提供.cpp扩展名。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何通过cpp程序运行shell脚本
- 模板专用化(按容器):value_type
- 使用2个键的cpp-stl::优先级队列排序不正确
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在cpp文件之间切换窗口?在Qt中
- cpp 模板专用化,错误说参数 1 的类型为 T,这取决于参数 T
- 聚合关系 - 在专用中初始化类,从单独的 .cpp/.h.
- 如何将模板构造函数专用化移动到 cpp 文件
- 如何在*.cpp文件中实现模板专用化方法