Почему мы сохраняем избыточный 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

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