У меня есть следующая проблема с использованием экземпляра шаблона [*].Создание шаблона шаблона шаблона C++
файл 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)>);
}
Очевидно, что это не работает. Буду признателен, если кто-то может указать мне в правильном направлении.
Спасибо!
[*] Да, я прочитал часто задаваемые вопросы о parashift.
Force конкретизации с: шаблон недействительными Foo :: Func (MyFunc е); –
2008-10-23 13:39:53