Я пытаюсь сделать это:
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 файле.
Цель анонимных пространств имен — не дать вам использовать эту функцию где-либо еще. Таким образом, нет смысла определять его в заголовке. Я бы предположил, что всякий раз, когда вы добавляете анонимное пространство имен, компилятор фактически обрабатывает его как пространство имен с уникальным именем. Поэтому, когда вы добавляете другое анонимное пространство имен, это не то же самое пространство имен.
Также см. Комментарий BoBTFish ниже, который проясняет это немного.
Других решений пока нет …