Що ж, давайте спочатку знесемо деякі ваші припущення:
- Однією з переваг бібліотек, призначених лише для заголовків для C ++, є те, що їх не потрібно складати окремо.
Складати речі окремо означає, що потенційно не потрібно перекомпілювати все, якщо змінюється лише частина.
Отже, недолік замість переваги.
- В C і C ++ вбудований має сенс лише у тому випадку, якщо функція визначена у файлі заголовка *.
Так, єдиний ефект, inline
що залишився, - це виняток із правила однозначення .
Горе вам, якщо ці визначення хоч інакше відрізняються.
Отже, якщо функція є внутрішньою для одиниці компіляції, позначте її static
. Це також робить вкладку більш імовірною, оскільки функція повинна бути доступною, щоб вбудувати її.
Але все ж, погляньте на оптимізацію зв’язку та часу, яку підтримують принаймні MSVC ++, gcc та clang.
- Традиційно в C, .c / .h використовується макет, де заголовок представляє мінімальний публічний інтерфейс блоку перекладу. Аналогічно .cpp / hpp.
Ну, лише представлення мінімального інтерфейсу, безумовно, одна з цілей - досягти вищої стабільності API та ABI та мінімізувати час компіляції.
Тим більше, що класи C ++ насправді не орієнтовані на це, оскільки всі приватні біти просочуються до заголовка, як і захищені, чи потрібно виходити з нього чи ні.
Конструкторська схема PIMPL призначена для зменшення таких деталей.
Частина, де розділення інтерфейсу та реалізації повністю провалюється в C ++, - це шаблони.
Комітет намагався зробити щось із експортованими шаблонами , але це було відмовлено як занадто складне і не дуже працює.
Зараз вони працюють над належною модульною системою , хоча це відбувається повільно. Це суттєво скорочує час збирання, а також повинно підвищити стабільність API та ABI за рахунок зменшення їх поверхні.
Чи в основному бібліотеки, що мають лише заголовки, більш ефективні для коду та часу виконання, ніж традиційні верстки? Якщо так, то це через обширних вкладених чи інших оптимізацій?
Бібліотеки, призначені лише для заголовків, можуть бути ефективнішими за розміром коду та часом виконання, хоча це залежить від того, чи поділяється бібліотека, яка кількість її використовується, якими способами та чи вбудована докаже вирішальну перемогу в конкретному випадку.
А причина для вбудовування настільки важлива для оптимізації не тому, що саме вбудовування є таким великим стимулом, а завдяки можливостям для постійного поширення та подальшої оптимізації воно відкривається.