Je n'ai pas lu le livre Modern C++ Design mais j'ai trouvé l'idée d'injection de comportement à travers des modèles intéressante. J'essaie maintenant de l'appliquer moi-même.Application d'une question de conception basée sur des règles
J'ai une classe qui a un enregistreur que je pensais pouvoir être injecté comme politique. L'enregistreur a une méthode log() qui prend un std :: string ou std :: wstring en fonction de sa politique:
// 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;
};
Maintenant, le est des quêtes, devrait prendre le lecteur un enregistreur comme argument, comme ci-dessus, ou devrait-il prendre une chaîne, puis instancier un basic_logger en tant que variable d'instance? Comme ceci:
template<class String>
class reader
{
public:
typedef String string_type;
typedef basic_logger<string_type> logger_type;
// ...
private:
logger_type _logger;
};
Quelle est la procédure à suivre?
S'il vous plaît, moins de choses d'injection - c'est C++. –
Je sais que je suis un peu endommagé par Java (je travaille principalement avec lui mais je n'en suis pas un grand fan). Le comportement et l'état doivent toujours être injectés (ou ce que vous voulez appeler) d'une manière ou d'une autre, que ce soit en C++, Ruby ou autre. Avec C++, d'après ce que je comprends de Boost, la conception basée sur les politiques est la voie à suivre. J'essaie juste d'envelopper ma tête autour d'elle. – Arthur
En fait lire Modern C++ Design vous aiderait probablement le mieux, car Alexandrescu montre des exemples similaires à cela. –