| Version 3 (modified by landauf, 17 years ago) (diff) | 
|---|
HowTo: ConfigValue
TracNav(TracNav/TOC_Development)?
Table of Contents
Description
Config-values are member variables of a class that can be configured in the config-file. The configured value will be assigned to every instance of this class.
To use config-values in your class, you have to follow those steps:
- Inherit from OrxonoxClass? or a derivative
 - Then you have to add void setConfigValues() to the class
 - Include core/ConfigValueIncludes.h? in the source file
 - Add SetConfigValue(variable, defaultvalue) macro-calls into setConfigValues()
 - Call setConfigValues() from the constructor of your class
 
Example
*.h file:
class MyClass : public SomeObject     (1)
{
    public:
        MyClass();
        void setConfigValues();       (2)
        ...
    private:
        float value_;
};
*.cc file:
#include "core/CoreIncludes.h"
#include "core/ConfigValueIncludes.h" (3)
// Constructor:
MyClass::MyClass()
{
    RegisterObject(MyClass);
    this->setConfigValues();          (5)
}
void MyClass::setConfigValues()
{
    SetConfigValue(value_, 123.4);    (4)
}
Inheritance
There are three possible ways to deal with inheritance and config-values. This section explains how to use them.
Note: Examples in this section aren't complete. Read the section above for a complete example (with the constructor, the call of setConfigValues() in the constructor, including header files, calling RegisterObject).
Use a config-value in derived classes
If a config-value is defined for a base-class, all derived classes will be configured by this value.
Example:
BaseClass implements a config value:
class BaseClass : public OrxonoxClass
{
    public:
        ...
        void setConfigValues();
    protected:
        float value_;
};
void BaseClass::setConfigValues()
{
    SetConfigValue(value_, 123.4);
}
DerivedClass inherits from BaseClass without implementing setConfigValues again:
class DerivedClass : public BaseClass
{
};
In the config-file this will look like this:
[BaseClass] value_=123.4
Then BaseClass::value_ and DerivedClass::value_ are both set by the config-value of BaseClass (and therefore 123.4).
Implementing a config-value only in a derived class
It's possible to define a config-value for a variable which was inherited from a base class.
Example:
BaseClass declares a variable but no config-value:
class BaseClass : public OrxonoxClass
{
    ...
    protected:
        float baseValue_;
};
DerivedClass derives from BaseClass and implements the config-value:
class DerivedClass : public BaseClass
{
    public:
        ...
        void setConfigValues();
};
void DerivedClass::setConfigValues()
{
    SetConfigValue(baseValue_, 10.1);
}
In the config-file this will look like this:
[DerivedClass] value_=10.1
Then DerivedClass::baseValue_ is set by the config-value (and therefore 10.1) but BaseClass::baseValue_ isn't configurable.
Overwriting config-values in a derived class
If both, a base class and a derived class, implement the same value, instances of the base class use the configured value from the config-value-section of the base class while instances of the derived class (and further derived classes) use the overwritten value.
Example:
BaseClass implements a config value:
class BaseClass : public OrxonoxClass
{
    public:
        ...
        void setConfigValues();
    protected:
        float value_;
};
void BaseClass::setConfigValues()
{
    SetConfigValue(value_, 123.4);
}
DerivedClass derives from BaseClass and implements the config-value again:
class DerivedClass : public BaseClass
{
    public:
        ...
        void setConfigValues();
};
void DerivedClass::setConfigValues()
{
    SetConfigValue(value_, 10.1);
}
In the config-file this will look like this:
[BaseClass] value_=123.4 [DerivedClass] value_=10.1
Then BaseClass::value_ is set by the config-value of BaseClass (and therefore 123.4) but DerivedClass::value_ uses the config-value of DerivedClass (and therefore 10.1).
More
There are many other features that come with config-values, for example configurable arrays or modifier functions. Read the related wiki page to learn more:



            






