Использование std :: функция для API (через границы модуля)

Я почти уверен, что знаю ответ на этот вопрос (думая «нет»), но можно ли fely ​​accept / return std :: function по значению в API (вне границ модуля)?

Я думаю «нет», так как не думаю, что есть какие-либо гарантии того, что одного поставщика ] std :: function реализация совместима с другой.Так ли это?

Если ответ отрицательный, как я подозреваю, как вы все справляетесь с подобными вещами? Возможно, мне придется прибегнуть к реализации своего собственного или просто избегать таких вещей, как std :: function , вместе взятых (например, работа с указателями на функции или функциональноидами). :-( Я уже делал это во многих случаях раньше (заново изобретая много стандартной библиотеки C ++ и, к сожалению, даже создавая наш собственный STL-совместимый векторный тип с поддержкой как range ctor, так и fill ctor, настраиваемых распределителей и т. Д. . было, конечно, не весело, и я сомневаюсь, что это было так же хорошо, как и стандартные реализации) просто потому, что можно было динамически связываться с библиотекой, которая имеет, скажем, реализацию std :: function в MSVC 2010 из двоичного файла, написанного на mingw, например

Альтернативой, конечно же, является отказ от использования этих функций C ++ в нашем API и использование, скажем, интерфейса C, но это обойдется нам довольно дорого, поскольку мы используем наш API в качестве центрального API для обоих внутренняя и сторонняя разработка.

5
задан Dev Null 13 March 2019 в 07:53
поделиться