【发布时间】:2013-06-13 14:32:37
【问题描述】:
我需要在输出流上绘制我的对象,通常是cout。
但我也希望用户能够输入任何具有<< 运算符的流(例如QTextStream),因此不必每次都输入cout。
定义此类参数的最简单方法是什么?
所以这就是我想要的,可以编译的东西:
virtual void draw(GeneralOutStream out = std::cout)
{
out << m_name << std::endl;
}
我知道我可以使用模板,(这就是我正在做的 atm。) 但我希望有一个不需要模板的解决方案。 但是,模板解决方案工作正常,所以基本上我只是好奇。
【问题讨论】:
-
如果您的对象继承自
std::ostream,您可以通过引用传递它。如果没有,我会使用模板。除非您的对象真的是流,否则我也不会添加此依赖项。 -
我会选择模板。只有在代码中某处使用该类型时,它们才会编译为特定类型。您甚至可以为不支持
<<运算符的用户提供专用版本。所以这是一个更好的解决方案 IMO。 -
如果您想支持 any 流,则需要模板,因为流本身是模板化的。我们是成熟行业的认真工程师,我们有广泛的字符和流来支持世界的语言!有时甚至可以使用它们,令我们惊讶的是......
-
然而,虚拟模板并不存在,因此您的解决方案的工作原理并不完全清楚。
-
这里使用模板没有意义;
std::ostream&应该够了。