错误:调用"to_string(std::basic_string<char>&)"没有匹配函数
error: no matching function for call to ‘to_string(std::basic_string<char>&)’
即使在模板中我可以有任何类型,函数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&)'
避免它的最佳方法是什么。
事先,我要求避免仅仅因为几个常见的关键词而链接到无关的问题。
std::to_string
仅适用于基本数字类型。
如果您需要一个更通用的函数,boost::lexical_cast
将处理更多的类型——实际上是可以发送到iostream
的任何类型。
#include <boost/lexical_cast.hpp>
...
private_string_field = boost::lexical_cast<std::string>(value);
基本字符串没有to_string
。这与无关
根据Benjamin Lindley的建议,我会考虑以下设计,使用to_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;
}
默认情况下,它尝试将操作数强制转换为字符串。通过这种方式,自定义类型可以提供自己的转换。另一种设计是在内部使用stringstream
和operator<<
进行转换,如下所示:
#include <iostream>
#include <string>
#include <sstream>
struct Type {
friend std::ostream& operator<<(std::ostream& out, const Type& value){
return out << "Type through operator<<";
}
};
template <class T>
std::string to_str(const T& value) {
std::string ret;
std::ostringstream ss;
ss << value;
ret = ss.str();
return ret;
};
int main(int argc, char **argv) {
// this is what would be in class
Type x;
std::string private_string_field;
private_string_field = to_str(42);
std::cout << private_string_field << std::endl;
private_string_field = to_str(x);
std::cout << private_string_field << std::endl;
return 0;
}
相关文章:
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 构造函数采用std::string_view与std::string并移动
- 为什么我的函数接受"std::string"进行排序不会改变它?
- std::string 可以作为 nlohmann::json 传递给显式构造函数
- 错误:调用"es_queue::set_rpc_vector(std::vector >&, std::__cxx11::string)"没有匹配函数
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- 无效打印(矢量<string>)函数未打印
- 为什么我不必从 std::string 的函数中释放字符串c_str?
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- C++ 模板函数无法将"std:string"转换为"double"作为回报
- 在线程中使用 std::string 函数是否安全?(C++)
- C++ 对 MBCS 使用 std::string 函数,对 UTF-16 使用 std::wstring 函数
- C++:STRING函数返回十六进制值而不是字符串
- 使用插入<string>函数时从字符到常量字符的转换无效
- C++:向量<通过<string>函数设置>初始化