65,201
社区成员




以下代码需要实现printer printer_imp1 printer_imp2 . 但是一直无法实现,求解决.
#include <vector>
#include <sstream>
int main()
{
int test[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::vector<int> v(test, test + 10);
std::vector<std::shared_ptr<printer>> ps;
{
auto p = std::make_shared<printer_imp1>();
ps.push_back(p); //按逗号分割打印
}
{
auto p = std::make_shared<printer_imp12>();
ps.push_back(p); //按回车分割打印
}
for (auto& p : ps)
{
p->print(std::cout,test);
std::stringstream ss;
p->print(ss, v);
}
getchar();
}
一个比较取巧的实现方法是,print只在基类printer中实现,派生类printer_imp1、printer_imp2中只提供分隔符,这样就解决了泛型print不能为virtual的问题~
这题并不好搞,如果用虚函数实现多态,再重载两个print函数实现打印数组、vector,是比较简单的。但是如果要求输入支持任意可迭代类型,就要用模板,而泛型和多态是冲突的,模板函数不能为virtual...