使用g ++执行此操作的正确方法是什么:
template < typename F >
void g (F f);
template < typename ... A >
void h (A ... a);
template < typename ... A >
void f (A ... a) {
g ([&a] () { h (a...); }); // g++-4.6: error: parameter packs not expanded with »...«
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码
struct A {
void f(int) {}
void g(int, double) {}
};
int main() {
using std::placeholders;
A a;
auto f1 = std::bind(&A::f, &a, _1);
f1(5); // <--- works fine
auto f2 = std::bind(&A::g, &a, _1);
f2(5, 7.1); // <--- error!
}
Run Code Online (Sandbox Code Playgroud)
我从编译器(gcc 4.8.1)收到此错误:
error: no match for call to '(std::_Bind<std::_Mem_fn<void (A::*)(int, double)>(A*, std::_Placeholder<1>)>) (int, double)'
f2(1, 1.1);
^
Run Code Online (Sandbox Code Playgroud)
你能告诉我错误在哪里吗?
谢谢,
马西莫