【问题标题】:Pass pointer as generic type c++ template将指针作为泛型类型 C++ 模板传递
【发布时间】:2015-06-14 08:17:00
【问题描述】:

我正在尝试将指针 (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;
}

【问题讨论】:

  • 我真的怀疑这是错误。请发布 MCVE。但是 A) 你不能添加指针和 B) char* = "string literal"; 已被弃用。使用const char*
  • 另请注意,return a+b;char* 可能不会像您认为的那样做。结果将毫无用处。
  • 代码没有问题,只是不能添加指针。 foo你还有别的定义吗?

标签: c++ templates pointers


【解决方案1】:

没有理由添加两个指针,它导致一个无意义的指针。想象一下,例如第一个文本位于地址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&lt;std::string&gt;(c,d)那样明确地写它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多