Здравствуйте, Vasya777, Вы писали:
BFE>>Pimpl idiom ака глупый указатель является стандартной парадигмой для данной ситуации.
V>А это можно сделать, если вся память для сервиса должна быть выделена статически на этапе компиляции?
Можно использовать placement new с зарезервированным буфером в статической памяти. У вас что, реал-тайм приложение? Чем вам обычный способ не угодил?
Может вам это поможет:
http://habrahabr.ru/post/111602/
V>>>Возможно ли это сделать средствами C++ без использования условной компиляции?
BFE>>Да: подключая разные файлы на разных платформах.
V>То есть использовать различные условия сборки проекта?
Нет, просто под каждую платформу написать свой Makefile/project-файл в котором подключать соответствующий для данной платформы файл. Но можно сделать и через ifdef.
У нас в конторе поддерживается две версии реализации boost/posix под различные платформы Windows/MacOS/Linux. Выбор boost/posix задаётся через ifdef и параметры компилятора, а реализация для платформ разнесена по файлам.
Типа такого:
TransportInterface.hpp — здесь описан интерфейс,
а в этих файла реализацию под конкретную конфигурацию:
TransportInterface_asio.cpp
TransportInterface_eddy25.cpp
TransportInterface_posix.cpp