gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:43 26 4
gpt4 key购买 nike

想象一下以下场景:

    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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com