我很确定这一定已经在这里了,但是我没有找到很多关于如何解决这类问题的信息(没有在通话中进行投射):
给定两个重载,我希望带有文字 0 的函数调用始终调用 unsigned int 版本:
void func( unsigned int ) {
cout << "unsigned int" << endl;
}
void func( void * ) {
cout << "void *" << endl;
}
func( 0 ); // error: ambiguous call
我理解为什么会发生这种情况,但我不想一直写 func( 0u ) 甚至 func( static_cast(0) ) 。所以我的问题是:
1)一般有推荐的方法吗?
2)按照以下方式进行操作有什么问题吗?这样做的原因是什么?
void func( unsigned int ) {
cout << "unsigned int" << endl;
}
template <typename T>
void func( T * ) {
static_assert( std::is_same<T, void>::value, "only void pointers allowed" );
cout << "void *" << endl;
}
func( 0 ); // calls func( unsigned int )!