Сообщение ? Зачем виртуальный метод запрещает структурную инициализаци от 22.08.2023 17:36
Изменено 22.08.2023 17:37 Sm0ke
? Зачем виртуальный метод запрещает структурную инициализацию
Вот есть простые структуры. Без явных конструкторов.
Как же удобно для них создавать объекты с почленной инициализацией.
Хочешь все укажи, хочешь некоторые.
С 20-ым стандартом можно по имени свойства значения задавать. (aka designated)
Но стоит только туда добавить хоть один виртуальный метод ...
... И всё! Для инициализации полей пиши конструктор
Зачем они так?
Даже не-виртуальный деструктор картины не портит.
Что не так с виртуальными методами? Не вижу смысла запрещать прежнюю инициализацию с ними!
Как же удобно для них создавать объекты с почленной инициализацией.
Хочешь все укажи, хочешь некоторые.
С 20-ым стандартом можно по имени свойства значения задавать. (aka designated)
#include <iostream>
using t_diff = std::ptrdiff_t;
struct t_param
{
// data
t_diff
count{};
bool
flag{};
//virtual void no() const {}
};
int main()
{
t_param o{1};
t_param p{.flag = true}; // designated / by prop name
return 0;
}Но стоит только туда добавить хоть один виртуальный метод ...
... И всё! Для инициализации полей пиши конструктор
Зачем они так?
Даже не-виртуальный деструктор картины не портит.
Что не так с виртуальными методами? Не вижу смысла запрещать прежнюю инициализацию с ними!
? Зачем виртуальный метод запрещает структурную инициализаци
Вот есть простые структуры. Без явных конструкторов.
Как же удобно для них создавать объекты с почленной инициализацией.
Хочешь все укажи, хочешь некоторые.
С 20-ым стандартом можно по имени свойства значения задавать. (aka designated)
Но стоит только туда добавить хоть один виртуальный метод ...
... И всё! Для инициализации полей пиши конструктор
Зачем они так?
Даже не-виртуальный деструктор картины не портит.
Что не так с виртуальными методами? Не вижу смысла запрещать прежнюю инициализацию с ними!
Как же удобно для них создавать объекты с почленной инициализацией.
Хочешь все укажи, хочешь некоторые.
С 20-ым стандартом можно по имени свойства значения задавать. (aka designated)
#include <iostream>
using t_diff = std::ptrdiff_t;
struct t_param
{
// data
t_diff
count{};
bool
flag{};
//virtual void no() const {}
};
int main()
{
t_param o{1};
t_param p{.flag = true}; // designated / by prop name
return 0;
}Но стоит только туда добавить хоть один виртуальный метод ...
... И всё! Для инициализации полей пиши конструктор
Зачем они так?
Даже не-виртуальный деструктор картины не портит.
Что не так с виртуальными методами? Не вижу смысла запрещать прежнюю инициализацию с ними!