我还没有阅读Modern C++ Design书,但已经发现通过模板感兴趣的行为注入的想法。我现在正在尝试自己应用它。应用基于策略的设计问题
我有一个类,有一个记录器,我认为可以作为一个政策注入。该记录器有一个log()方法这需要根据其政策的一个的std :: string或std :: wstring的:
// basic_logger.hpp
template<class String>
class basic_logger
{
public:
typedef String string_type;
void log(const string_type & s) { ... }
};
typedef basic_logger<std::string> logger;
typedef basic_logger<std::wstring> wlogger;
// reader.hpp
template<class Logger = logger>
class reader
{
public:
typedef Logger logger_type;
void read()
{
_logger.log("Reading...");
}
private:
logger_type _logger;
};
现在的追问是,如果读者需要记录仪作为一个参数,像上面,或者如果它需要一个字符串,然后实例化一个basic_logger作为一个实例变量?像这样:
template<class String>
class reader
{
public:
typedef String string_type;
typedef basic_logger<string_type> logger_type;
// ...
private:
logger_type _logger;
};
什么是正确的路要走?
请注意,更少的注入东西 - 这是C++。 – 2010-04-04 20:15:49
我知道我有点受到Java损坏(我主要与它合作,但我不是它的粉丝)。行为和状态仍然需要以某种方式注入(或者任何你想要调用它的),它是C++,Ruby还是其他。有了C++,从我从Boost中了解到的情况来看,基于策略的设计就是最好的选择。我只是想把头围住它。 – Arthur 2010-04-04 20:24:49
实际上阅读现代C++设计可能会帮助你最好的,因为Alexandrescu显示类似的例子。 – 2010-04-04 20:25:57