1 回答
1
您可以通过创建一个专门版本的 Setting 来做到这一点,该版本仅在设置类型继承自 Serializable 时才可用。
通过使用部分模板专业化,std::enable_if
您可以创建一个单独的 Settings 类,该类仅在 Setting 类型实现时使用Serializable
。
例如:
// Normal Setting class, for the primitive types your backend supports
template <typename T, typename _ = void>
class Setting {
std::string m_name;
T m_defaultValue;
public:
T load() {
if(backend.contains(m_name))
return backend.load<T>(m_name);
return m_defaultValue;
}
void save(const T &value) {
backend.save(m_name, value);
}
};
// specialized Setting class that will apply to all classes that implement Serializable
template<typename T>
class Setting<T, std::enable_if_t<std::is_base_of_v<Serializable, T>>> {
std::string m_name;
T m_defaultValue;
public:
T load() {
if(backend.contains(m_name)) {
T s;
s.deserialize(backend.load<std::string>(m_name));
return s;
}
return m_defaultValue;
}
void save(const T &value) {
backend.save(m_name, value.serialize());
}
};
于 2021-10-26T19:16:11.000 回答