← Каталог
Особенности и расширения языка C++ — Policy-Based Проектирование
Фрагмент из «Особенности и расширения языка C++»: Policy-Based Проектирование.
template<typename StoragePolicy, typename LoggingPolicy>
class Container : private StoragePolicy, private LoggingPolicy {
public:
void add(int value) {
StoragePolicy::store(value);
LoggingPolicy::log("Added", value);
}
};
struct VectorStorage {
std::vector<int> data;
void store(int v) { data.push_back(v); }
};
struct SilentLogging {
void log(const char*, int) {}
};
using MyContainer = Container<VectorStorage, SilentLogging>; template<typename StoragePolicy, typename LoggingPolicy>
class Container : private StoragePolicy, private LoggingPolicy {
public:
void add(int value) {
StoragePolicy::store(value);
LoggingPolicy::log("Added", value);
}
};
struct VectorStorage {
std::vector<int> data;
void store(int v) { data.push_back(v); }
};
struct SilentLogging {
void log(const char*, int) {}
};
using MyContainer = Container<VectorStorage, SilentLogging>;