我想将模板函数作为模板函数的参数传递。在以下代码的“ meta_func_ok”函数中,已成功将函数指针作为模板函数的参数传递。但是作为模板,
template < typename N > N
meta_func_ok( N( *f )( N ), N x ) {
return f( x );
}
template < typename F, typename N > N
meta_func_ng( F f, N x ) {
return f( x );
}
template < typename N > N
target_func( N x ) {
return x;
}
int main() {
meta_func_ok( target_func, 1 );
meta_func_ng( target_func, 1 ); // LINE 18
return 0;
}
编译此代码会在下面产生错误。
ng.cpp:在函数'int main()'中:ng.cpp:18:31:错误:无匹配项 调用“ meta_func_ng(,int)” meta_func_ng(target_func,1)的函数; ^ ng.cpp:7:1:注意:候选:模板N meta_func_ng(F,N)meta_func_ng(F f,N x){^ ~~~~~~~~~~~ ng.cpp:7:1:注意:模板参数 推论/替代失败:ng.cpp:18:31:注意:无法推论 模板参数“ F” meta_func_ng(target_func,1);
我该怎么办?预先感谢!
答案 0 :(得分:2)
编译器对类型推断的支持不完善。在第二种情况(meta_func_ng
中,N
类型是根据自变量1
来推断的,但是无法从F
来推断target_func
,因为您没有指定target_func
的{{1}}类型参数的显式类型(编译器不足以知道N
的{{1}}与{{1}相同} s meta_func_ng
)。
这很好,但是:
N