【发布时间】:2022-01-03 03:11:43
【问题描述】:
我在foo.h 中有以下模板类特化:
using VisionMethod = enum
{
TemplateMatching,
...
};
template <VisionMethod>
class Foo
{
Foo() = delete;
};
template <>
class Foo<TemplateMatching>
{
public:
static void get_pose();
};
并希望在foo.cpp 中实现它:
#include "foo.h"
void
Foo<TemplateMatching>::get_pose()
{
std::cout << "Using foo<TemplateMatching>::get_pose()...\n";
}
但是当我尝试调用 foo<TemplateMatching>::get_pose() 例如main.cpp 仅包括 foo.h 之后。我可以实现我想要的,而不必在foo.h 或main.cpp 中包含foo.cpp - 也许使用显式实例化?还是像foo.txx 我唯一的“干净”解决方案?
【问题讨论】:
-
不,你不能。如果
get_pose()不包含在您正在编译和链接在一起的任何翻译单元中,编译器如何知道它的实现? -
我想我可以做一些类似于显式实例化的事情,但我猜这行不通。
-
@Androvich 你所描述的应该可以通过wandbox.org/permlink/LDpxhgeYPkakWFwE
标签: c++ class templates specialization