如何编译程序时出现错误“没有匹配的函数调用'to_string'”?C++

如果我在这里有 DATA_T = std::string,我将无法编译此代码,因为错误“没有匹配的函数用于调用 'to_string'”。该函数不允许将字符串转换为字符串。但是无论如何我都需要获取字符串,如何解决此错误并编译程序?

template <typename DATA_T>
std::string get_string(DATA_T subdata) {
  std::string data = "...";
  if (typeid(subdata) == typeid(std::string))
    data += subdata;
  else
    data += std::to_string(subdata);
  return data;
}

回答

与其尝试在函数体内的模板参数类型上进行分支,不如编写一个重载,当参数为std::string.

template <typename DATA_T>
std::string get_string(DATA_T subdata) {
  std::string data = "...";
  data += std::to_string(subdata);
  return data;
}

std::string get_string(std::string subdata)
{
  std::string data = "...";
  data += subdata;
  return data;
}

  • 不要专门化,而是过载。如果删除`template &lt;&gt;`,代码仍然可以编译。专业化可能会导致一些令人困惑的难以找到的“错误”

回答

使用 C++17 可以使用if constexpr以下命令使其更简单:

#include <string>
#include <type_traits>

template <typename DATA_T>
std::string get_string(DATA_T subdata) {
  std::string data = "...";
  if constexpr (std::is_same_v<DATA_T, std::string>)
    data += subdata;
  else
    data += std::to_string(subdata);
  return data;
}

请参阅其他答案以了解 C++17 之前的解决方案。


以上是如何编译程序时出现错误“没有匹配的函数调用'to_string'”?C++的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>