为什么不匹配std :: function void(T)

时间:2015-06-21 06:18:30

标签: c++

我不确定如何说出这个问题。我有一个简单的demo

我认为这段代码可行,但我收到下面的编译错误。将T更改为int(注释掉的行)使其工作,但现在它不再是通用的。为什么这个当前版本没有编译?以及如何使这项工作?

#include <cstdio>
#include <functional>
template<class T>
void test(T t, std::function<void(T)> f) { f(t); }
//void test(T t, std::function<void(int)> f) { f(t); }

void PrintIt(int v){ printf("V=%d\n", v); };


int main(int argc, char *argv[]) {
    test(5, PrintIt);
}

结果:

prog.cpp: In function 'int main(int, char**)':
prog.cpp:11:20: error: no matching function for call to 'test(int, void (&)(int))'
     test(5, PrintIt);
                    ^
prog.cpp:11:20: note: candidate is:
prog.cpp:4:6: note: template<class T> void test(T, std::function<void(T)>)
 void test(T t, std::function<void(T)> f) { f(t); }
      ^
prog.cpp:4:6: note:   template argument deduction/substitution failed:
prog.cpp:11:20: note:   mismatched types 'std::function<void(T)>' and 'void (*)(int)'
     test(5, PrintIt);

0 个答案:

没有答案