错误:没有匹配的函数调用'to_string(std :: basic_string &)'

问题描述 投票:5回答:2

即使在模板中我可以具有任何类型,但函数to_string不适用于基本字符串:

例如:

std::string str("my string");
my_class(str);

具有此函子定义:

template<class valuetype>
void operator()(valuetype value)
{
    ...
    private_string_field = std::to_string(value);

不起作用。这是错误:

错误:没有匹配的函数来调用‘to_string(std :: basic_string&)’

避免它的最佳方法是什么。

[预先,我要求避免仅由于一些常用关键字而链接到不相关的问题。

c++ string c++11 compiler-errors
2个回答
6
投票

[std::to_string仅适用于基本数字类型。

如果需要更通用的功能,std::to_string将适用于更多类型-实际上可以发送给boost::lexical_cast的任何类型。

boost::lexical_cast

2
投票

基本字符串没有iostream。没关系。

#include <boost/lexical_cast.hpp> ... private_string_field = boost::lexical_cast<std::string>(value); 的建议后,我将考虑以下设计,使用to_string,但提供默认模板:

to_string

默认情况下,它尝试将操作数转换为字符串。这样,自定义类型可以提供自己的转换。另一种设计是内部使用Benjamin Lindleyto_string进行转换,例如:

#include <iostream>
#include <string>
struct Type {
  explicit operator std::string() const{
    return std::string("I am type");
  }
};

namespace std {
template <typename T>
  string to_string(const T& value) {
    return string(value);
  }
}

int main(int argc, char **argv) {
    // this is what would be in class
    Type x;
    std::string private_string_field;
    private_string_field = std::to_string(42);
    std::cout << private_string_field << std::endl;

    private_string_field = std::to_string(x);
    std::cout << private_string_field << std::endl;
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.