Ключевое слово inline
в С++ позволяет определять функции в заголовках, чтобы компилятор мог либо набросать их, либо оставить только одну копию функции. Это позволяет уменьшить количество единиц компиляции, определяя функции непосредственно в заголовках, с преимуществом часто в несколько раз быстрее время компиляции и, возможно, более быстрое выполнение.
Почему этот шаблон нельзя использовать для переменных пространства имен, тогда как функции в С++ на самом деле являются переменными области пространства имен при просмотре их как специального указателя?
То, что я могу думать, это использовать статическую локальную переменную встроенной функции.
inline std::string& Hello__() { //Edit: Added the &
static std::string hello("Hello");
return hello;
}
#define Hello (Hello__())
Изменить: я хотел бы уточнить свой вопрос, как показано ниже.
Я использую термин "inline" как то, что понимает компилятор. Он позволяет одно и то же определение с тем же именем быть в нескольких единицах компиляции, позволяя определение в заголовке. Основным преимуществом "inline" является не преимущество производительности, поскольку макрофункция будет иметь, а более короткое время компиляции из уменьшенного количества единиц компиляции. Это может быть в несколько раз короче.
У меня появилось решение, позволяющее переменной работать как встроенная функция. Но я все еще нахожусь для лучшего способа сделать это.
Чтобы четко заявить, что я хочу достичь, это определение переменной пространства имен в заголовке, например встроенной функции, чтобы сделать процесс сборки максимально простым и быстрым.
Edit2: Благодарим вас за ссылку в комментарии от dyp. Я только что прочитал предложение, и это именно то, о чем я думаю. Каков текущий статус этого предложения?
Цитата из предложения:
Однако, не редкость желать существования глобально уникальный объект без необходимости выбирать один перевод единица, в которой это можно определить. Как практический вопрос, делая этот выбор обычно требует либо использования нетривиальных макросов препроцессора, отдельно скомпилированные библиотеки или и то, и другое. Однако одна сила С++ это его способность поддерживать разработку библиотек headeronly. В эта вена, отсутствие способности определять встроенную переменную poses значительное ограничение на дизайн библиотеки.