Some proof of concept code; but I think I didn't get the OOP up to the mark.
Code:
#include<string>
#include<vector>
#include<stdexcept>
#include<iostream>
class SObject
{
const std::string className;
const std::vector<std::string> mNames;
std::vector<std::string> mValues;
public:
SObject(const std::string& cn, const std::vector<std::string>& mn, const std::vector<std::string>& mv)
:className(cn), mNames(mn), mValues(mv)
{};
virtual std::string& memValue(const std::string& m)
{
//Do a better search later
int i;
for(i=0;i<mNames.size();++i)
if(m==mNames[i])return mValues[i];
throw(std::runtime_error("no_such_member"));
};
virtual std::string getClassName(){return className;};
};
class derived : public SObject
{
static std::string className;
static std::vector<std::string> mNames;
public:
derived(const std::vector<std::string>& mv)
:SObject(className,mNames,mv){};
std::string& operator[](const std::string& m){return memValue(m);}
};
std::string derived::className = "derived";
std::vector<std::string> derived::mNames = {"mA","mB","mC"};
int main()
{
derived foo({"Value_of_mA","b","c"});
std::cout<<foo["mA"];
}