【发布时间】:2016-12-13 00:17:17
【问题描述】:
template<typename T, typename F, typename L>
void print(const T& s, F first, L last)
{
os << s << " = (\n";
os << charInput1;
std::copy(first, last, std::ostream_iterator<int>(std::cout, "\n"));
os << charInput2;
os << "\n)";
}
我正在尝试进行自定义 cout 打印。该成员函数属于一个类CustomPrinter,charInput1 和charInput2 是它的私有char 成员,这是我在构造自定义打印机时定义的。 first 和 last 应该是迭代器,s 是一个字符串。
例如,假设charInput1 是+ 符号,charInput2 是句点.,我希望最终输出如下,给定std::vector<int> = {1, 1, 1}:
(
+1.
+1.
+1.
)
但我得到了
(
+1
1
1
.
)
所以我的问题是,为了在每个向量元素之间打印给定的char,还需要什么?是否可以只使用std::ostream_iterator<int>(std::cout, /* char here? */)?因为这个方法好像只能在中间插入字符串,所以我也需要在之前插入。如果没有,有什么更好的方法?提前致谢!
编辑:我主要有
CustomPrinter cp(std::cout, '+', '.');
std::vector<int> v = {1, 1, 1};
cp.print("result", v.begin(), v.end()); // function call..
【问题讨论】:
-
发布一个完整的、可编译的示例,说明如何调用此函数。
-
@latedeveloper 嗨,我已经添加了函数的调用方式。
-
您为什么将
<int>硬编码为ostream_iterator的类型名?它不应该来自类模板吗? -
为
F和L设置两个模板参数真的有意义吗?它们不需要是相同的迭代器类型吗?也许您应该只为元素类型提供一个模板参数,并从中构建迭代器类型。然后,您也可以为std::ostream_iterator使用相同的类型名。
标签: c++ printing iterator pretty-print ostream