Когда я пытаюсь построить этот код:
// foo.h
namespace foo {
namespace bar {
void put();
}
}
#include "foo.h"namespace foo {
namespace {
template<typename T>
void put() { }
}
void bar::put() {
put<int>();
};
}
foo.cpp: In function ‘void foo::bar::put()’:
foo.cpp: error: expected primary-expression before ‘int’
foo.cpp: error: expected ‘;’ before ‘int’
Очевидно, что put<int>
использует put
ссылаясь на bar::put
, Как я могу сделать это относится к put<T>
в анонимном пространстве имен?
Вы можете полностью определить имя шаблона функции:
namespace foo {
namespace bar {
void put();
}
}
namespace foo {
namespace {
template<typename T>
void put() { }
}
void bar::put() {
::foo::put<int>();
}
}
Также обратите внимание, что вам не нужно использовать точку с запятой после определения функции.
Других решений пока нет …