Почему мы сохраняем избыточный CTOR в std :: copyable_function?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему мы сохраняем избыточный CTOR в std :: copyable_function?

Сообщение Anonymous »

Согласно документам C ++, std :: copyable_function имеет два перегруженных CTOR следующим образом:

Код: Выделить всё

template
explicit copyable_function(std::in_place_type_t,
CArgs&&... args);

template
explicit copyable_function(std::in_place_type_t,
std::initializer_list il, CArgs&&... args);
Обратите внимание, что оба CTOR необходимы для создания его основного вызова объекта, используя прямую инициализацию, инициализация прямого строка . Рассмотрим следующий код: < /p>

Код: Выделить всё

struct Functor {
Functor(int, int) {
}

Functor(std::initializer_list) {
}

void operator()() const {
}
};
< /code>
std::copyable_function(std::in_place_type, 1, 2)
вызовет functor :: functor (int, int) , а не functor :: functor (std :: initiazer_list ) .
Если мы хотим позвонить в Functor :: functor (std :: initiazer_list ), просто используйте std :: copyable_function (std :: in_place_type , std :: initializer_list {1, 2}) .
Оба случая являются интуитивными и не является двусмысленностью. Итак, мой вопрос:
Зачем нам нужен второй CTOR, а первого достаточно?

Подробнее здесь: https://stackoverflow.com/questions/796 ... e-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»