我有一些代码var input = {
"lat": "50.2111",
"lon": "18.1233"
};
Algorithmia.client("YOUR_API_KEY")
.algo("algo://Gaploid/Elevation/0.3.0")
.pipe(input)
.then(function(output) {
console.log(output);
});
是一个变量,其类型是模板参数。假设代码是:
std::to_string()
现在,有时这个参数必须是template <typename T>
std::string foo(const T& t) {
return std::string("I got ") + std::to_string(t);
}
;我想在字符串中获取地址,例如void *
。没问题,对吧?我应该像我"I got 0xdeadbeef"
那样得到它,对吧? ......对我来说不幸的是,事实并非如此。那么,
std::cout << my_ptr
中使用流之外,还有什么比为foo()
重载std::to_string
更好(使用{{1}在那里为void*
)?答案 0 :(得分:3)
namespace my_to_str {
using std::to_string;
std::string to_string(void* ptr){
// implement
}
}
现在my_to_str::to_string
可以使用您自己的一组重载进行扩展,例如void*
。
答案 1 :(得分:2)
你不能为std::to_string()
重载void*
,所以这没有实际意义。
但是你没有 来使用std::to_string()
。您可以实现自己的功能,只需使用stringstream
:
namespace N {
template <class T>
auto to_string(T const& val, int)
-> decltype(std::to_string(val))
{
return std::to_string(val);
}
template <class T>
std::string to_string(T const& val, ...)
{
std::ostringstream oss;
oss << val;
return val.str();
}
template <class T>
std::string to_string(T const& val) {
return to_string(val, 0);
}
}
此 允许使用您想要的任何细节重载N::to_string()
(例如,如果您希望N::to_string(void* )
做一些特殊的事情,只需添加另一个重载)。
答案 2 :(得分:-1)
您可以为operator+
个案件制作自定义void *
:
std::string operator+(const std::string &str, const void *vstr){
return str + std::string(reinterpret_cast<const char *>(vstr));
}