Есть семейство шаблонных функций template<StringType> StringType do_something(...) в NS my::nested::nspace.
Стало лень выписывать это всё целиком.
Решил написать:
template<typename StringType>
using do_something = my::nested::nspace::do_something<StringType>;
А тут мне и говорят: error: 'do_something<StringType>' in namespace 'my::nested::nspace' does not name a type.
Получается, using не такой классный, как хотелось бы? Можно как-то выкрутится, кроме как написать всё семейство функций в текущем NS в виде прокси и отфорвардив реализацию к оригинальным функциям?
Здравствуйте, пффф, Вы писали:
П>Получается, using не такой классный, как хотелось бы?
А кто-то говорил, что using для чего-то кроме типов?
П>Можно как-то выкрутится, кроме как написать всё семейство функций в текущем NS в виде прокси и отфорвардив реализацию к оригинальным функциям?
using ns-name :: member-name ; (6)
6) using-declaration: makes the symbol member-name from the namespace ns-name accessible for unqualified lookup as if declared in the same class scope, block scope, or namespace as where this using-declaration appears.
Тут ничего про такое ограничение не написано.
Хотя, это старый синтаксис using'а, про который я забыл.
Новый, действительно, вроде как только про типы.
У старого проблемка есть — не работает в class-scope, а хотелось. Но в функциях работает, и то хорошо
П>using ns-name :: member-name ; (6)
П>6) using-declaration: makes the symbol member-name from the namespace ns-name accessible for unqualified lookup as if declared in the same class scope, block scope, or namespace as where this using-declaration appears.
П>Тут ничего про такое ограничение не написано.
Вы бы, блин, еще бы нашли цитату для using-а, который для унаследованных из базовых классов методов используется, типа такого:
class Base {
public:
Base(int i, float f) {...}
...
};
class Derived : public Base {
public:
using Base::Base;
...
};
Здравствуйте, пффф, Вы писали:
П>Какой using я хотел, я словами описал.
Вероятно, вы хотели using namespace.
namespace some::my::ns {
namespace funcs {
// Здесь ваши шаблонные функции.template<typename StringType>
StringType do_something(Arg1 arg) {...}
template<typename StringType>
StringType do_something(Arg1 arg, Arg2 arg2) {...}
template<typename StringType>
StringType do_something(Arg1 arg, Arg2 arg2, Arg3 arg3) {...}
...
} // namespace funcs
// Это чтобы do_something можно было использовать напрямую внутри some::my::ns.using namespace funcs;
...
} // namespace some::my::ns
// Это чтобы do_something можно было использовать напрямую, но не беря лишнего
// из some::my::ns.using namespace some::my::ns::funcs;