gpt4 book ai didi

c++ - 函数模板和派生类

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:28 25 4
gpt4 key购买 nike

如果是这段代码,为什么 foo(d) 调用模板函数而不是 'base' 函数?有没有办法让它在不显式编写另一个函数重载的情况下调用基本函数?

template <class T> void foo(T val)
{
printf("template called\n");
}

class Base
{
};

void foo(const Base &val)
{
printf("Base called\n");
}

class Derived : public Base
{
};

int main() {
Derived d;
foo(d);
return 0;
}

最佳答案

why does foo(d) call the template function rather than the 'base' function?

因为对于模板函数fooT被推导为Derived,所以是精确匹配。对于非模板,需要进行派生到基础的转换。

您可以使用 SFINAE 来完成;使函数模板仅适用于不是从 Base(或 Base 本身)派生的类型。

template <class T> 
std::enable_if_t<!std::is_base_of_v<Base, T>> foo(T val)
{
printf("template called\n");
}

LIVE

关于c++ - 函数模板和派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200369/

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