std::function, could not deduce template argument
От: c-smile Канада http://terrainformatica.com
Дата: 12.02.15 20:16
Оценка: 3 (1)
Есть вот такая конструкция

#include <functional>
#include <iostream>

template <typename T>
void f(std::function<void(T)> g)
{
    std::cout << "1 arg:";
    g(1);
}

template <typename T1, typename T2>
void f(std::function<void(T1 t1,T2 t2)> g)
{
    std::cout << "2 args:";
    g(1,2);
}

int main(int argc, char* argv[])
{
    auto func1 = [](int x) { std::cout << x << std::endl; };
    auto func2 = [](int x, int y) { std::cout << x << y << std::endl; };

    f(func1);
    f(func2);

    return 0;
}


Попытка скомпилировать дает

error C2784: 'void f(std::function<void(T)>)' : could not deduce template argument for 'std::function<void(T)>' from 'main::<lambda_015bd0dc27990c8871eddd8030a68e56>' d:\tests\functional.cpp

Как бы исхитриться?

Ну или получить количество параметров std::function wrapper и их типы. Знаю как это сделать с пом. variadic templates, но на руках VS 2010, там этого нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.