Менять его описание не можем. Может содержать виртуальные функции, наследоваться в т.ч. виртуально и т.п.
Хочу для каждого мембера (для методов не надо) задать пару атрибутов в компайлтайме и когда нужно их получать.
Не придумал ничего лучше такого
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 тоже. Есть идеи как лучше сделать?
T>Лишняя ссылка на значение очень не нравится. Да и дополнительное поле, через которое нужно идти к value тоже. Есть идеи как лучше сделать?
Мне не нравится что атрибуты хранятся в полях объекта, они точно разные для разных экземпляров?
Я понимаю, что там есть ссылки, из-за которых их не сделать статик полем, но тогда типа сделать
Metatable getFieldMetatable() {
}
Которая возвращает структуру в которой уже ссылки на поля
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, T4r4sB, Вы писали:
TB>Мне не нравится что атрибуты хранятся в полях объекта, они точно разные для разных экземпляров?
Одинаковые и они же constexpr (static, кстати, забыл перед constexpr), места не занимают.
Да и хочется аттрибуты иметь там же, где работаю с полями, без доп функций.
типа
B b;
doSomethingWithValueAndAttributes(b.s.value, b.s.int_attr, b.s.str_attr);
Здравствуйте, tapatoon, Вы писали:
T>Имеем класс вроде такого T>Менять его описание не можем. Может содержать виртуальные функции, наследоваться в т.ч. виртуально и т.п. T>Хочу для каждого мембера (для методов не надо) задать пару атрибутов в компайлтайме и когда нужно их получать. T>Есть идеи как лучше сделать?
. Чтобы исключить возможные ошибки при ручном проставлении идентификаторов:
Тут есть другая засада, если нам нужны уникальные идентификаторы. То луше их сразу фигачить в базу данных, чтобы потом с разными версиями можно было работать единообразно.
То есть складывать идентификаторы в базу, указывать что, и в какой версии появилось, а что выкинуто. И потом можно делать разные запросы с эти данным.
В том числе генерировать заголовочные файлы с кучей enum-ом в разных namespace-ах.