boost :: function с шаблонами функций

#include <vector>
#include <iostream>
#include "boost/function.hpp"

template <class T1, class T2, class T3>
static void
FOREACH (T1 cont, boost::function<T2(T3)> callback) {
typename T1::iterator it = cont. begin ();
for ( ; it != cont. end(); it++ ) {
callback (*it);
}
}static void
Print (int number)
{
std:: cout << number << std:: endl;
}int  main ()
{
std:: vector<int> vec;
for ( int i=1; i <= 10; ++i ) vec. push_back (2*i);

FOREACH ( vec, fun );

return 0;
}

Почему выше код не компилируется?
Если я создаю специализированную версию, как показано ниже, она работает нормально.

static void
FOREACH (std:: vector<int> cont, boost::function<void(int)> callback) {
std:: vector<int>:: iterator it = cont. begin ();
for ( ; it != cont. end(); it++ ) {
callback (*it);
}
}

Кто-нибудь, скажите, пожалуйста, как я могу использовать boost :: function с шаблонами функций?

1

Решение

Было бы проще сделать функтор параметром шаблона:

template <class T1, class F>
static void FOREACH (T1 cont, F callback) {
typename T1::iterator it = cont.begin();
for ( ; it != cont. end(); it++ ) {
callback (*it);
}
}

Это будет работать, если вы передадите ему совместимую вызываемую сущность, которая действительно существует. Конечно, было бы еще проще использовать std::for_each:

#include <algoritm>

...

std::for_each(vec.begin(), vec.end(), Print);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]