gpt4 book ai didi

c++ - 编译器如何在不更改参数列表的情况下重载模板函数?

转载 作者:太空狗 更新时间:2023-10-29 23:49:34 26 4
gpt4 key购买 nike

正如您在下面的代码中看到的那样get被模板化。

struct A
{
int i;
char c;
};

class SL
{
static void* m_a;


public:

template <class T>
static T* get()
{
return static_cast<T*>(m_a);
}
};

void* SL::m_a = new A{12, 'C'};

int main()
{
std::cout << SL::get<A>()->i;
return 0;
}

我不明白的是我写SL::get<B>()的时候编译器如何在同一个命名空间中创建两个具有相同名称的方法,具有两种不同的返回类型,它们都没有参数,即没有不同的参数列表?他们如何使彼此重载?还是将寺庙函数生成理解为具有相同的名称并通过重载解析来解释它们的调用是错误的?

最佳答案

模板 instantions 实际上是 不同的 函数,它们没有被重载。你可能会想到模板参数 <B>作为函数名称的一部分。所以SL::get<A>SL::get<B>确实是不同的功能(尽管源自相同的模板)。

引自cppreference :

Template argument deduction takes place after the function template name lookup (which may involve argument-dependent lookup) and before overload resolution.

如您所见,重载决议是一个不同的过程。

关于c++ - 编译器如何在不更改参数列表的情况下重载模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39655870/

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