Ведь std::any это контейнер, который принимает почти любые типы. А std::function только принимает единственный определённый тип
Ну вообще-то не единственный…
std::function принимает не «единственный» тип, она параметризована по сигнатуре функции.
Что значит "единственный" ? Как напишешь - так и будет.
Можно бы написать, если существует std::any_function: std::any_function a = test; //int (*)(int, double) a = test1; //void (*)()
и как эту функцию вызывать?
И что вы с этой any_function делать потом собираетесь?
Сначала через std::any_cast загрузить из контейнера в переменную в условии совпадения типов,
Ну так сделайте на std::any, кто мешает?)
А как потом вызывать, как узнавать ?
Можно узнать с помощью typeid и type index, также вектор *type_info
Я не понимаю, что мешает вам сделать any_function на std::any
Ну ладно, раз нет контейнера для только функции. Все равно, спасибо
еще раз, контейнер для только функции есть - std::function. Контейнер для чего угодно - std::any. чем более обобщенный контейнер, тем обобщеннее интерфейс. Если контейнер создан для функций - у него должна быть возможность предоставить общий интерфейс для вызова любой хранимой им функции. Именно поэтому у std::functon для этого есть operator() с той самой сигнатурой, заданной в шаблонном параметре, а std::any умеет только копировать/перемещать хранимый им объект, сообщать о его типе и предоставлять возможность запросить объект с конкетным типом.
Контейнерами в C++ принято называть совсем другие вещи
вдобавок, есть даже container requirements в cppreference
Ну если стде-фанкшин это тип данных точнее семейство типов данных. Храни СТД any от всех возможных твоих СТД functions
И вот я не понял А почему си для этого так обязательно использовать?
Обсуждают сегодня