考虑一组函数,例如
template< class Fun >
void A( const Fun& )
{
}
template< class Fun >
void B( const Fun& )
{
}
template< class Fun >
void C( const Fun& )
{
}
旨在将函数类型作为参数。然后,这完全没问题:
template< class T >
void Func( const T& )
{
}
A( Func< int > );
B( Func< int > );
C( Func< int > );
现在我想摆脱重复int
模板参数,所以我尝试了这个:
template< class T >
struct Helper
{
template< template< class > class Fun >
static void A( Fun< T >& f )
{
A( f );
}
template< template< class > class Fun >
static void B( Fun< T >& f )
{
B( f );
}
...
};
typedef Helper< int > IntHelper;
IntHelper::A( Func ); //error
IntHelper::B( Func ); //
IntHelper::C( Func ); //
但是这无法在 gcc 4.5.1 ( 'error: no matching function for call to 'Helper<int>::A(<unresolved overloaded function type>)'
) 和 MSVC10 ( cannot use function template 'void Func(const T &)' as a function argument
and could not deduce template argument for 'overloaded function type' from 'overloaded function type'
) 上编译。
有人可以确切地解释为什么,有没有办法解决这个问题?
编辑好的我明白为什么现在不可能了;对于包含解决方法的答案:在实际代码中有很多不同Func
的 s,比如 100,而只有大约 6 个函数,如 A、B 和 C ......