C++ 如何避免模版函数调用不明确?
我无法理解代码示例,摘自“C++模板完整指南”,第8.3章。为什么编译器会说错误?作者说&fooC++ 如何避免模版函数调用不明确?,c++,templates,C++,Templates,我无法理解代码示例,摘自“C++模板完整指南”,第8.3章。为什么编译器会说错误?作者说&foo可能是两种不同类型中的一种,为什么 #include <iostream> template <typename T> void single(T x) { // do nothing } template <typename T> void foo(T t) { std::cout << "Value" << std
#include <iostream>
template <typename T>
void single(T x)
{
// do nothing
}
template <typename T>
void foo(T t)
{
std::cout << "Value" << std::endl;
}
template <typename T>
void foo(T* t)
{
std::cout << "Pointer" << std::endl;
}
template <typename Func, typename T>
void apply(Func func, T x)
{
func(x);
}
int main ()
{
apply(&foo<int>, 7);
int i = 0;
std::cin >> i;
}
#包括
模板
单空位(T x)
{
//无所事事
}
模板
void foo(T)
{
std::cout函数模板有两个重载foo
。foo
可以是foo(int)
(第一个)或foo(int*)
(第二个)
要解决歧义,可以强制转换为相关函数类型
即
apply(static_cast&foo),7);
免责声明:编译器甚至不能远距离查看代码
apply( static_cast<void(*)(int)>( &foo<int> ), 7 );