Прежде всего, если вы распространяете свою библиотеку как исходный код, а не как скомпилированную библиотеку, вы можете игнорировать этот ответ. Есть также некоторые специфичные для Windows проблемы, которые могут не относиться к другим платформам.
Лично я считаю, что вам следует избегать использования слишком большого количества фантичного c ++ в открытом интерфейсе вашей библиотеки, поскольку это может вызвать много проблем у клиента.
Я не уверен, насколько это применимо к вашему конкретному примеру, но я лично столкнулся с проблемами, когда символы из библиотеки stl, которые я использовал, конфликтовали с символами из сторонней библиотеки при обновлении до новой версии. Это означало, что у нас случались сбои в странных местах, и мне пришлось делать много трюков, чтобы избежать проблемы. В итоге я остался со старой версией библиотеки из-за этого.
Другая проблема, с которой вы можете столкнуться, заключается в том, что разные компиляторы c ++ могут по-разному манипулировать одними и теми же символами, что означает, что вам потенциально необходимо предоставить отдельную библиотеку для каждого компилятора, который вы хотите поддерживать, даже если они используют одну и ту же версию Boost. Посмотрите книгу "Несовершенный С ++" для обсуждения этого вопроса.
В современном мире различных компиляторов и сред C ++ я считаю, что печальная истина заключается в том, что вам следует избегать использования в интерфейсе чего-либо, кроме C, и обеспечивать динамическое связывание вашей библиотеки (чтобы избежать конфликтов при связывании ваших клиентов с ссылками на вашу библиотеку, библиотека времени выполнения Windows может быть настоящей болью здесь). Вы по-прежнему можете использовать boost и столько же c ++ внутри вашей библиотеки, сколько пожелаете, поскольку все ваши символы будут изолированы от среды ваших клиентов в dll.
Если вы действительно хотите иметь интеллектуальные указатели и другие приятные функции C ++ в интерфейсе вашей библиотеки, создайте удобный слой, для которого вы распространяете исходный код. Это гарантирует, что он всегда компилируется в среде клиентов. Этот интерфейс затем вызывает ваши открытые функции C хитрыми способами. Я не думаю, что будет хорошей идеей использовать повышение в этом слое, так как это заставит ваших клиентов принять его, даже если они этого не хотят, однако его легко заменить или найти другое решение, так как этот слой распространяется как источник код.
Еще одна приятная особенность заключается в том, что, как правило, проще вызывать функции C в dll, чем функции c ++ со странным искажением имен, если вы хотите представить свою библиотеку другим языкам, кроме C / C ++.
Этот подход определенно усложняет вашу жизнь во многих отношениях, но это снижает вероятность того, что люди будут избегать вашей библиотеки, потому что просто невозможно успешно связать их собственным кодом.