Есть вот такая конструкция
#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, там этого нет.