Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何避免模版函数调用不明确?_C++_Templates - Fatal编程技术网

C++ 如何避免模版函数调用不明确?

C++ 如何避免模版函数调用不明确?,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

我无法理解代码示例,摘自“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::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 );