已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
六年前关闭了。
Improve this question
我有一些代码,其中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()
中使用流之外,还有什么比为void*
重载std::to_string
(为operator<<
在那里使用std::stringstream
)更好的方法吗?
3条答案
按热度按时间6gpjuf901#
现在
my_to_str::to_string
可以用您自己的重载集来扩展,比如void*
。fhg3lkii2#
你不能为
void*
重载std::to_string()
,所以这是没有意义的。但是您并不一定要使用
std::to_string()
,您可以实现自己的代码,然后再使用stringstream
:这 * 确实 * 允许用任何你想要的细节重载
N::to_string()
(例如,如果你想让N::to_string(void* )
做一些特殊的事情,只需添加另一个重载)。zfciruhq3#
您可以为
void *
案例定制operator+
: