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

标签 c++ templates function-pointers

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

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/

相关文章:

c++ - 如何通过 `friend` 将流运算符<<放在模板化类主体之外?

c++ - 使用可变参数模板类型描述函数参数

c++ - 我应该如何检查基础类型值是否为枚举值?

c++ - 嵌套模板的模板模板别名?

c++ - main() 的链接是实现定义的是什么意思?

c++ - 如何使用模板继承和组件

c - 将委托(delegate)传递给 D 中的外部 C 函数

c - 无法在 C 中传递结构指针以创建顺序列表

c++ - 如何定期唤醒 C++ 11 线程?

c++ - 使用 clang 时在 gdb 中评估 libc++ 的方法