将指针传递为泛型类型c ++模板

时间:2015-06-14 08:17:01

标签: c++ templates pointers

我正在尝试将指针(char *)传递给我写的泛型函数。但我得到一个错误“在此上下文中重载foo模糊”。为什么会这样?

template <class T>
T foo(T a, T b)
{
    return a+b;
}
int main()
{
    char *c="Hello",*d="world";
    foo<char*>(c,d);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

它没有理由添加两个指针,它会导致一个非敏感的指针。想象一下,例如第一个文本位于地址0x7fffff00,第二个文本位于0x80000100。然后在32位机器上添加后,您将获得... 0。零。空指针!

也许您想要使用字符串,例如:

#include <string>

template <class T>
T foo(T a, T b)
{
    return a+b;
}

int main()
{
    std::string c="Hello", d="world";
    foo(c,d);
    return 0;
}

另请注意:在许多情况下(像这一个)编译器可以为您推断模板类型,因此没有理由像foo<std::string>(c,d)那样明确地编写它。