I have the following template class specializations in foo.h
:
using VisionMethod = enum
{
TemplateMatching,
...
};
template <VisionMethod>
class Foo
{
Foo() = delete;
};
template <>
class Foo<TemplateMatching>
{
public:
static void get_pose();
};
and wish to implement it in foo.cpp
as:
#include "foo.h"
void
Foo<TemplateMatching>::get_pose()
{
std::cout << "Using foo<TemplateMatching>::get_pose()...\n";
}
But I (somewhat understandably) get a linker error when I try to call foo<TemplateMatching>::get_pose()
in e.g. main.cpp
after only including foo.h
. Can I achieve what I want, without having to include foo.cpp
in either foo.h
or main.cpp
- maybe using explicit instantiation? Or is something like foo.txx
my only "clean" solution?
CodePudding user response:
You need to define your specialized function (i.e what you put in foo.cpp
) in foo.h
in order to use it in main.cpp
CodePudding user response:
what you proposed already works (after add #include <iostream>
), you probably forget to tell the compiler to include foo.cpp
.
like g main.cpp foo.cpp