У меня есть следующая проблема с использованием экземпляра шаблона [*].
файл foo.h
class Foo
{
public:
template <typename F>
void func(F f)
private:
int member_;
};
файл foo.cc
template <typename F>
Foo::func(F f)
{
f(member_);
}
файл caller.cc
Foo::func(boost::bind(&Bar::bar_func, bar_instance, _1));
Хотя это компилируется нормально, компоновщик жалуется на неопределенный символ:
void Foo::func<boost::_bi::bind_t...>
Как создать экземпляр функции Foo::func
? Поскольку он принимает функцию в качестве аргумента, я немного смущен. Я попытался добавить функцию инстанцирования в foo.cc, как я привык к обычным нефункциональным типам:
instantiate()
{
template<> void Foo::func<boost::function<void(int)> >(boost::function<void(int)>);
}
Очевидно, это не работает. Я был бы признателен, если кто-то может указать мне в правильном направлении.
Спасибо!
[*] Да, я читал облегчённый FAQ по parashift.