#pragma once #include namespace configuration { class interface { public: virtual ~interface() { } virtual std::string read(const std::string &) const = 0; virtual interface &write(const std::string &, const std::string &) = 0; virtual bool is_set(const std::string &) const = 0; template T get(const std::string &) const; template void set(const std::string &, const T &); }; template T interface::get(const std::string &name) const { return T(read(name)); } template<> int interface::get(const std::string &) const { return 15; } template void interface::set(const std::string &name, const T &value) { write(name, std::string(value)); } template<> void interface::set(const std::string &name, const int &) { write(name, "15"); } }