dtkCoreParameterCollection
This class could advantageously replace the simple alias dtkCoreParameters
over the QHash<QString, dtkCoreParameter *>
. Typically, it would be great to write code as follows:
auto&& r = collection.parameter<dtk::d_real>("my_real");
QVariant v = collection.variant("my_real");
instead of current code:
dtk::d_real& r = *(reinterpret_cast<dtk::d_real*>(collection["my_real"]));
QVariant v = collection["my_real"]->variant();
This requires the following features:
-
Inherits from dtkCoreParameters
which is an alias onQHash<QString, dtkCoreParameter *>
-
Adds helper methods to retrieve parameters in their more specialized type -
Adds helper method to retrieve parameters directly as variant -
Adds method to convert the hash into a QVariantMap -
Keeps all the methods from parent class
class DTKCORE_EXPORT dtkCoreParameterCollection : public QHash<QString, dtkCoreParameter *>
{
using base_type = QHash<QString, dtkCoreParameter *>;
using self_type = dtkCoreParameterCollection;
public:
using key_type = base_type::key_type;
using mapped_type = base_type::mapped_type;
using value_type = dtkCoreParameter*;
using size_type = base_type::size_type;
using difference_type = base_type::difference_type;
using reference = value_type&;
using const_reference = const value_type&;
using iterator = base_type::iterator;
using const_iterator = base_type::const_iterator;
using key_iterator = base_type::key_iterator;
using key_value_iterator = base_type::key_value_iterator;
using const_key_value_iterator = base_type::const_key_value_iterator;
public:
dtkCoreParameterCollection(void) = default;
dtkCoreParameterCollection(std::initializer_list<std::pair<key_type, value_type>> list);
dtkCoreParameterCollection(const dtkCoreParameterCollection&);
dtkCoreParameterCollection(dtkCoreParameterCollection&&);
dtkCoreParameterCollection(const dtkCoreParameters&);
dtkCoreParameterCollection(dtkCoreParameters&&);
template <typename InputIterator>
dtkCoreParameterCollection(InputIterator first, InputIterator last);
~dtkCoreParameterCollection(void) = default;
dtkCoreParameterCollection& operator = (const dtkCoreParameterCollection&);
dtkCoreParameterCollection& operator = (const dtkCoreParameters&);
template <typename T, typename E = dtk::is_core_parameter<T>>
const T& parameter(const key_type&) const;
template <typename T, typename E = dtk::is_core_parameter<T>>
T& parameter(const key_type&);
QVariant variant(const key_type&) const;
QVariantMap asVariantMap(void) const;
};
Edited by KLOCZKO Thibaud