gpt4 book ai didi

c++ - 具有模板化参数的函数指针歧义

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:40 25 4
gpt4 key购买 nike

我正在尝试将重载函数指针作为参数传递给模板函数。

float Function1(float par1)
{
return 0;
}

float Function1(float par1, float par2)
{
return 0;
}

template<typename R, typename A1>
void Bind(R(*func)(A1))
{
std::cout << "Correct one called\n";
}

template<typename R, typename A1, typename A2>
void Bind(R(*func)(A1, A2))
{
std::cout << "False one called\n";
}

int main()
{
Bind<float, float>(&Function1);
}

即使我使用 2 个浮点参数显式调用该函数,编译器似乎也无法解析正确的调用。编译器显示“模糊函数调用”错误。

我在这里创建了一个小示例: http://liveworkspace.org/code/4kVlUY$195

这个错误的原因是什么?谢谢。

最佳答案

当您尝试获取 Function1 的地址时,就会出现歧义。编译器看到 2 个重载,它不知道你指的是哪一个。你需要明确指出你想要哪一个:

Bind(
static_cast<float(*)(float, float)>(&Function1)
);

您在调用 Bind 时显式指示模板参数,但为时已晚,歧义是在那之前发现的。

关于c++ - 具有模板化参数的函数指针歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15614328/

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