Существует ли какой-либо метод, который может печатать все переменные-члены структуры?

#c #stl

#c #stl

Вопрос:

у меня есть серия struct, я хочу добавить для них метод show .

пожалуйста, посмотрите следующий код:

 A {
  int a, b, c;
  void Show() {
    cout << a << " " << b << " " << c << endl;
  }
};

B {
  int a, b;
  void Show() {
    cout << a << " " << b  << endl;
  }
};
 

как вы можете видеть, мне нужно определить функцию show для каждой из них, но у меня много struct .

есть ли какой-либо метод, который я могу использовать, например: A a; Show(a) , может сделать это в одном определении?

Комментарии:

1. Короткий ответ, нет. Обычно требуется реализовать одну или несколько функций вывода и ввода. Как только C получит отражение, у вас должно быть больше возможностей.

2. Нет, вы не можете. И я предлагаю вам перегрузить оператор «output» << , чтобы вы могли сделать, например A a; /* Initialize members of a */ std::cout << a << 'n';

3. Как говорит @Someprogrammerdude, вы можете определить функцию для A таких, как std::ostream amp;operator<<(std::ostream amp;out, const A amp;a) { out << a.a << " " << a.b << " " << a.c; return out; } .

4. @fanfly За исключением того, что функция должна использовать out вместо std::cout … 🙂 Кроме того, поскольку оператор возвращает поток, можно было бы сделать return out << ...; .

5. @Someprogrammerdude Да, вы правы; Я ввел ошибку.

Ответ №1:

В стандартной библиотеке такого механизма нет. Для таких типов, как ваш A и B , вы должны иметь возможность использовать magic_get