Реализация карты функций c ++

Я поигрался с вариативными шаблонами в новом стандарте С ++ и придумал функцию карты (заголовки + исключенные декреты):

template<typename T>
T square(T i)
{
        return i * i;
}

template <typename T, typename... Ts>
const tuple<Ts...> map(const T f, const Ts...args)
{
        return make_tuple(f(args)...);
}

int main(int c, char *argv[])
{
        tuple<int, int> t;
        int (*fp) (int) = square;

        t = map(fp, 6, 8);

        cout <<get<0>(t) <<endl;
        cout <<get<1>(t) <<endl;

        return 0;
}

Которая работает. Пока все аргументы одного типа для map. Если я изменю главное, чтобы использовать более общую форму:

 tuple<int, float> t;

 t = map(square, 6, 8.0f);

gcc 4.4 сообщает:

In function ‘int main(int, char**)’:
error: no matching function for call to ‘map(<unresolved overloaded function type>, int, float)’

Есть идеи, как это сделать?

5
задан ildjarn 22 November 2011 в 23:51
поделиться