enum ValueDataType { STRING_TYPE, INTEGER_TYPE, DOUBLE_TYPE, BOOLEAN_TYPE }; class MessageParameter { private: string _name; string _value; ValueDataType _valueDataType; public: template T getValue() { switch(_valueDataType) { case ValueDataType::BOOLEAN_TYPE: if (_value == "true") { return true; } else { return false; } break; case ValueDataType::INTEGER_TYPE: return atoi(_value.c_str()); break; case ValueDataType::DOUBLE_TYPE: return atof(_value.c_str()); break; default: return _value; break; } } ValueDataType getValueType() { return _valueDataType; } string getName() { return _name; } MessageParameter(char* name, string value, ValueDataType valDataType) { _name = string(name); _value = value; _valueDataType = valDataType; } };