我可以专门化运算符<<吗?
我想专门化运算符<<但这段代码无法编译;
template<>
std::ostream& operator<< < my_type >( std::ostream& strm, my_type obj);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
要专门化模板,首先必须声明一个模板。
对于免费的
operator<<
,您不需要模板;你可以为你的my_type
类重载它:如果你的对象大小不小,你可能需要考虑通过 const 引用传递,这样你就不会在每次流式传输时复制它:
(从技术上讲,您可以显式地专门化一个
运算符<<
,但我认为这不是您想要或需要的。为了能够将模板运算符<<与 语法需要使模板专业化可以从参数类型之一推导出来。
通常的<<
To specialize a template, first you have to have a template declared.
In the case of a free
operator<<
you don't need a template; you can just overload it for yourmy_type
class:If your object isn't trivial in size, you may want to consider passing via a const reference so that you don't copy it every time you stream it:
(Technically you can explicitly specialize an
operator<<
, but I don't think that this is what you want or need. In order to be able to use a template operator<< with the usual << syntax you need to make the template specialization deducible from one of the parameter types.E.g.
)
为什么不只是超载呢?
仅当存在专门化的模板时,您才可以专门化。
您的参数可能应该是
const my_type&
,以避免不必要的复制。Why not just overload?
You only specialize when there exists a template to specialize.
Your parameter should probably be
const my_type&
, to avoid a needless copy.