Я создаю небольшую общую библиотеку c ++, в которой есть класс (в заголовочном файле), подобный этому
class Foo {
...
std::optional<some_type> _bar;
...
};
Поскольку std::optional
- это C ++ 17, любой, кто включает вышеуказанный файл, должен скомпилировать C ++ 17. Однако _bar
не является частью общедоступного интерфейса библиотеки. _bar
используется только в реализации. Итак, мой вопрос, как я могу предоставить файл заголовка, который только предоставляет открытые методы, но поддерживает мою реализацию C ++ 17? Я надеюсь, что мне не нужно заставлять пользователей библиотеки использовать C ++ 17, верно?
Я также использую CMake для генерации файлов сборки, если это имеет значение.