Разрешение пространства имен C ++

Когда я пытаюсь построить этот код:

// 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> в анонимном пространстве имен?

4

Решение

Вы можете полностью определить имя шаблона функции:

namespace foo {
namespace bar {
void put();
}
}

namespace foo {
namespace {
template<typename T>
void put() { }
}
void bar::put() {
::foo::put<int>();
}
}

Также обратите внимание, что вам не нужно использовать точку с запятой после определения функции.

4

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

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

По вопросам рекламы [email protected]