c++:也将派生类的重载函数作为参数调用(无需显式强制转换)

标签 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;
}

基本上我想实现模板化函数被调用以获取指针,这些指针不是从我的基础派生的。如果 ptr 是从 myBase 派生的,我希望在没有显式强制转换的情况下调用 myFunction 的第二个版本。那可能吗?

最佳答案

使用类型特征来防止模板绑定(bind):

template<typename T>
typename std::enable_if<!std::is_base_of<myBase, T>::value, void>::type myFunction(T*)
{
}

如果您无法使用 C++0x,请改用 Boost 的类型特征库。

关于c++:也将派生类的重载函数作为参数调用(无需显式强制转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6253589/

相关文章:

c# - 为什么不直接使用类字段呢?

Python 在向 numpy 数组添加过程中从 long 进行转换

java - 如何将 jbyteArray 转换为结构?

Haskell Read(无实例)

c# - 通用属性比较 - 识别属性变化

c++ - 传递重载成员函数的函数指针?

c++ - 无法将 ‘char**’ 转换为 ‘char*’

c++ - 在 C++ 中拆分 const char*

c++ - 在具有预分配 block 的自定义 STL 分配器中重新绑定(bind)

c++ - istream (ostream) 与 bool