Сообщение Универсальный конструктор от 07.07.2016 13:03
Изменено 07.07.2016 13:50 B0FEE664
В рамках продолжения изучения C++11.
Правильно ли я понимаю, что в производных классах теперь не нужно дублировать конструкторы базового класса, а можно написать один Универсальный Конструктор:
который первыми аргументами принимает параметры для своих данных, а параметры для базового класса передаются прямой передачей в виде вариадик хвоста? Или в таком подходе есть скрытые проблемы?
PS При множественном наследовании есть простой способ написать универсальный конструктор?
Правильно ли я понимаю, что в производных классах теперь не нужно дублировать конструкторы базового класса, а можно написать один Универсальный Конструктор:
template<class TData, class... Args>
Derived(TData&& rrDerivedData, Args&&... args)
: Base (std::forward<Args >(args)...),
m_strData(std::forward<TData>(rrDerivedData))
{
}
который первыми аргументами принимает параметры для своих данных, а параметры для базового класса передаются прямой передачей в виде вариадик хвоста? Или в таком подходе есть скрытые проблемы?
Скрытый текст | |
| |
PS При множественном наследовании есть простой способ написать универсальный конструктор?
В рамках продолжения изучения C++11.
Правильно ли я понимаю, что в производных классах теперь не нужно дублировать конструкторы базового класса, а можно написать один Универсальный Конструктор:
который первыми аргументами принимает параметры для своих данных, а параметры для базового класса передаются прямой передачей в виде вариадик хвоста? Или в таком подходе есть скрытые проблемы?
Update: кажется я нашёл одну: этот конструктор настолько универсальный, что перекрывает конструктор копирования. Значит аргументы самого класса Derived не должны быть шаблонными:
PS При множественном наследовании есть простой способ написать универсальный конструктор?
Правильно ли я понимаю, что в производных классах теперь не нужно дублировать конструкторы базового класса, а можно написать один Универсальный Конструктор:
template<class TData, class... Args>
Derived(TData&& rrDerivedData, Args&&... args)
: Base (std::forward<Args >(args)...),
m_strData(std::forward<TData>(rrDerivedData))
{
}
который первыми аргументами принимает параметры для своих данных, а параметры для базового класса передаются прямой передачей в виде вариадик хвоста? Или в таком подходе есть скрытые проблемы?
Update: кажется я нашёл одну: этот конструктор настолько универсальный, что перекрывает конструктор копирования. Значит аргументы самого класса Derived не должны быть шаблонными:
template<class... Args>
Data(std::string&& rrData, Args&&... args)
: Base (std::forward<Args >(args )...),
m_strData(std::move (rrData) )
{
}
Скрытый текст | |
| |
PS При множественном наследовании есть простой способ написать универсальный конструктор?