У меня есть несколько структур, которые мне нужно добавить к моим векторам и задать им некоторые значения по умолчанию.
- Структуры являются внешними, я не могу их изменить.
- Хотяприсваивая эти значения, мне для удобства нужно видеть имена членов структуры.
- Мне для удобства нужно визуально хранить все значения по умолчанию в одном и том же месте.
- В настоящее время компилятор оптимизирует удаление неиспользуемых ветвей в myClass:: addStruct () - это именно то, что я хочу.
В: это можно сделать лучше / проще?
РЕДАКТИРОВАТЬ Я не знаюнет C ++ 17
// внешние структуры
typedef struct A {
int member1;
float member2;
char *member3;
// ...
} A;
typedef struct B {
double member5;
float member3;
int *member4;
// ...
} B;
typedef struct C {
char* member5;
char* member2;
float *member3;
// ...
} C;
...
template <class T>
void myClass::addStruct(std::vector<T> &vp)
{
void *sp = nullptr;
if(std::is_same<T, A>::value) {
A s{};
s.member1 = 2;
s.member3 = "whatever";
sp = &s;
}
else if(std::is_same<T, B>::value) {
B s{};
s.member4 = nullptr;
s.member3 = 3.1f;
sp = &s;
}
else if(std::is_same<T, C>::value) {
C s{};
s.member2 = "whenever";
sp = &s;
}
/* else if() {
}
else if() {
} ...
*/
if(sp == nullptr) {
// print error
return;
}
vp.push_back(*(reinterpret_cast<T*>(sp)));
}
// usage
addStruct<A>(...);
addStruct<A>(...);
addStruct<B>(...);
addStruct<C>(...);