На данный вопрос уже ответили:
Хочу создать функцию которая будет пробегаться по всем полям класса и задавать им значения либо 0, если поле числовое, либо пустую строку, если поле строковое.
Что то вроде того func<Class>(obj);
По скольку все классы разные и поля у них разные, а в С++ почти нет ни какого рантайма, то видимо подобное должно делаться на этапе компиляции, видимо через шаблоны .
Подскажите возможно ли это, или движок шаблонов С++ не настолько развит чтобы делать такие вещи?
Возможно есть какой-то трюк с макросами?
Вариант очистки структуры на базе ответа, ранее упомянутого в комментарии:
#include <iostream>
#include <string>
#define STRUCT_FIELDS \
X(int, i) \
X(double, d) \
X(std::string, c)
struct S {
#define X(type, name) type name;
STRUCT_FIELDS
#undef X
};
template<typename T>
void f(T& t)
{
t = T();
}
void clear(S& s) {
#define X(type, name) f(s.name);
STRUCT_FIELDS
#undef X
}
int main() {
S s { 1, 42.1, "c" };
std::cout << s.i << "[" << s.c << "]" << s.d << "\n";
clear(s);
std::cout << s.i << "[" << s.c << "]" << s.d << "\n";;
}
Результат выполнения:
1[c]42.1
0[]0
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задача - удалённый мониторинг рабочего стола сотрудникаДля передачи через сокет нужен строковый буфер с jpeg-снимком всего того, что происходит...
Во-первых, insert для вектора требует два параметра - куда вставлять, и что вставлятьВы передаете только что
Как можно реализовать запрет на подключение DLL к выполняемому процессу на программном уровне? Программа написана на C++Среда разработки Visual...