Предположим, что существует тип struct
, который будет использоваться для хранения координат точки в 3D-пространстве.C++ - Есть ли способ перегрузить назначенные инициализаторы?
Это может быть определено как:
struct Point { double x, y, z; };
Making использование double
значений, потому что мы хотим быть как можно более точным.
экземпляр этого struct
, может быть объявлена с использованием назначенных составных литералов, например:
double x = 0.0;
double y = 0.0;
double z = 0.0;
...
Point p = (struct Point){ .x=x, .y=y, .z=z };
Однако при попытке объявить другую точку, начиная с различных типов:
int x = 0;
int y = 0;
int z = 0;
...
Point p = (struct Point){ .x=x, .y=y, .z=z };
Компилятор бросает ошибка, поскольку он не может найти подходящий конструктор. Это работает, если один делает:
Point p = (struct Point){ .x=(double)x, .y=(double)y, .z=(double)z };
Есть ли способ перегрузки конструктора точки, так что один не должен вручную CAST каждого члена списка инициализации удваивать?
Возможно, используя что-то вроде Point(initializer_list<int> ...) {}
в заявлении struct
?
Я думаю, что '{.x = х, .y = у, .z = г}' Синтаксис из C, не C++, не так ли? – yeputons
Да, но конструкторы/перегрузка относятся к C++, если я не устарел. – almosnow
Я бы просто создал 'std :: initializer_list' конструктор. –
NathanOliver