Используя анон. Функция пространства имен в аноне. область имен

Я пытаюсь сделать это:

file.h

namespace {
void fun();
const bool nevermind = Register( fun );
}

file.cpp

namespace {
void fun() {
do_some_job();
}
}

Наличие ошибки связи. Функция void fun () не найдена компоновщиком.

Если я попытаюсь сделать это:

file.h

namespace {
void fun() {
do_some_job();
}
const bool nevermind = Register( fun );
}

все идет хорошо.

Как скомпилировать первый случай? Я не хочу иметь определение функции в * .h файле.

-1

Решение

Цель анонимных пространств имен — не дать вам использовать эту функцию где-либо еще. Таким образом, нет смысла определять его в заголовке. Я бы предположил, что всякий раз, когда вы добавляете анонимное пространство имен, компилятор фактически обрабатывает его как пространство имен с уникальным именем. Поэтому, когда вы добавляете другое анонимное пространство имен, это не то же самое пространство имен.

Также см. Комментарий BoBTFish ниже, который проясняет это немного.

2

Другие решения

Других решений пока нет …