mok*_*oka 2 c++ casting overloading
想象一下以下场景:
template<class T>
void myFunction(T *)
{
//do nothing
}
void myFunction(myBase * _base)
{
//do something with _base
}
int main( int argc, const char* argv[] )
{
myDerivedFromBase * ptr = new myDerivedFromBase;
myFunction(ptr); //calls the templated version
myFunction(static_cast<myBase*>(ptr)); //calls the correct version
delete ptr;
}
Run Code Online (Sandbox Code Playgroud)
基本上我想实现模板化函数被调用指针,而不是从我的基础派生.如果ptr是从myBase派生的,我希望在没有显式强制转换的情况下调用myFunction的第二个版本.那可能吗?
使用类型特征来阻止模板绑定:
template<typename T>
typename std::enable_if<!std::is_base_of<myBase, T>::value, void>::type myFunction(T*)
{
}
Run Code Online (Sandbox Code Playgroud)
如果您不能使用C++ 0x,请使用Boost的类型特征库.