Можно ли реализовать класс таким образом, чтобы можно было инициализировать его значение, как если бы оно было POD - PullRequest
1 голос
/ 12 января 2012

У меня есть класс (назовем его TheClass), который довольно часто используется в следующей ситуации: несколько экземпляров создаются из констант и передаются в качестве нескольких аргументов другому конструктору.К сожалению, я должен использовать довольно громоздкий синтаксис для инициализации:

Otherclass{ TheClass{1, 'a', 2}, 
            TheClass{1, 'b', 4},
            TheClass{3, 'h', 2}, 
            TheClass{1, 't', 8} }

Есть ли способ сделать возможным инициализировать класс, как если бы это был POD?Т.е. я хочу иметь возможность написать

Otherclass{ {1, 'a', 2}, 
            {1, 'b', 4},
            {3, 'h', 2}, 
            {1, 't', 8} }

Редактировать : я отправил еще один вопрос с правильным определением проблемы, с которой я столкнулся.Пожалуйста, смотрите Можно ли передать данные в виде initializer_list в std :: массив структур?

1 Ответ

5 голосов
/ 12 января 2012

Это должно делать то, что вы хотите. В качестве альтернативы вы можете typedef TheClass t; или определить макрос следующим образом: #define _(x) TheClass x и #undef впоследствии.

#include <initializer_list>
class TheClass {
public:
  TheClass(int x, char y, int z) { }
};

class OtherClass {
public:
  OtherClass(std::initializer_list<TheClass> t) { }
};

int main (int argc, char **argv) {
  OtherClass s { {1,'a',2}, {1, 'b', 4}, {3, 'h', 2}, {1, 't', 8}};
  return 0;
}
...