Имеем класс вроде такого
class A
{
string s;
int i;
};
Менять его описание не можем. Может содержать виртуальные функции, наследоваться в т.ч. виртуально и т.п.
Хочу для каждого мембера (для методов не надо) задать пару атрибутов в компайлтайме и когда нужно их получать.
Не придумал ничего лучше такого
class B : A
{
template<class T, const int IntAttr, const char* StrAttr> struct MyField
{
T& value;
constexpr int int_attr = IntAttr;
constexpr const char* str_attr = StrAttr;
};
MyField<string, 1, str1> sField { s };
MyField<int, 2, str2> iField { i };
}
Лишняя ссылка на значение очень не нравится. Да и дополнительное поле, через которое нужно идти к value тоже. Есть идеи как лучше сделать?