Я почти уверен, что знаю ответ на этот вопрос (думая «нет»), но можно ли 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 для обоих внутренняя и сторонняя разработка.