Что означает «статический» в контексте объявления глобальных шаблонных функций?

0

Я знаю, что статические средства в контексте объявления глобальных не-шаблонных функций (см. например, " Что такое" статическая "функция?), Что полезно, если вы пишете вспомогательную функцию в заголовке, который включен из нескольких разных местоположений, и хотите избегайте ошибок "повторного определения".

Поэтому мой вопрос: что означает статическое значение в контексте объявления глобальных функций шаблона? Обратите внимание, что я специально спрашиваю о глобальных, нечленовных функциях шаблона, которые не принадлежат классу.

Другими словами, в чем разница между следующими двумя:

template <typename T>
void foo(T t)
{
    /* implementation of foo here */
}

template <typename T>
static void bar(T t)
{
    /* implementation of bar here */
}
Теги:
templates
function

1 ответ

1
Лучший ответ

Обратите внимание, что функция шаблона фактически не компилируется, если не требуется экземпляр этой функции шаблона.

Затем этот экземпляр имеет те же свойства, что и статическая функция без шаблона: т.е. Тот экземпляр, исходящий из его соответствующей единицы компиляции, будет невидим для других единиц компиляции, включая компоновщик.

  • 0
    Интересно - значит ли это, что статика здесь не действует? Или это что-то меняет? Являются ли эти две функции правильными и правильными в C ++?
  • 1
    Шаблонные функции автоматически вставляются. В C ++ inline не только намекает компилятору на встроенный, но и запрещает его включение в таблицу символов. Inline в C ++ имеет примерно то же значение, что и static inline в C99. Таким образом, здесь не должно быть никакой разницы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню