【发布时间】:2022-11-18 00:09:07
【问题描述】:
我试图理解以下answer:
例如,您可能有一个 Source 接口和一个 Sink 接口 - 并且 一个同时实现 Source 和 Sink 的 Filter 抽象类 作为实现 Source 和 Sink 的 Pipe 类,只是通过 数据直接通过。这只是命名和命名的众多方法之一 组织这样一个框架。
我确实多次阅读该段,但我认为我错过了这里的全部要点。有人可以给我一个上面的简单 C++ 实现吗?
这是我目前的状态:
#include <cstdio> #include <string> class Source { public: virtual std::string readsome() = 0; }; class Sink { public: virtual void writesome(std::string const &s) = 0; }; class Filter : public Source, public Sink {}; class Pipe : public Source, public Sink {}; class Stdin : public Source { public: std::string readsome() { char buf[4096]; size_t nread = fread(buf, 1, sizeof buf, stdin); return std::string(buf, nread); } }; class Stdout : public Sink { public: void writesome(std::string const &s) { fwrite(s.c_str(), 1, s.size(), stdout); } }; class Tr : public Filter { const char From; const char To; public: Tr(char from, char to) : From(from), To(to) {} std::string readsome() { ... } void writesome(std::string const &s) { ... } };我如何连接
Stdin到Tr到Stdout?典型的main功能表示赞赏。
【问题讨论】:
-
你的问题到底是什么?看起来你已经掌握了 C++ 实现位,所以......你是在问如何使用它吗?为什么需要这种架构?
-
你能根据上面的内容发布一个典型的
main函数吗? -
答案并没有说要使用
readsome和writesome函数。它说基本上要自己设计所有这些东西。 -
实现过滤图的一种方法是只要有
readsome或只要有writesome(两种不同的方式,具体取决于哪个方向对您来说更方便)。然后你就可以调用最后一个过滤器的readsome或第一个过滤器的writesome。
标签: c++ design-patterns stream pipeline