我有以下代码:
template <typename T> void f1( T t ) { std::cout << "f1( " << t << " ) called." << endl; } template <typename T> void f2( T t ) { std::cout << "f2( " << t << " ) called." << endl; } template <typename F,typename T> void call( F && f,T t ) { f( t ); } template <typename T> void foo( T t ) { call( f1<T>,t ); // Why is <T> necessary? // f1(t) is a valid expression! call( f2<T>,t ); } void bar() { foo( 1 ); }
在函数foo()中,我需要指定模板参数,即使f1(t)是一个有效的表达式.这有点破坏了我的代码中的一些可能性.我的问题:
>为什么我需要指定模板参数?
>我如何解决这个限制? (允许C 11或C 14).