Если у меня есть класс Foo в строке пространства имен:
namespace bar
{
class Foo { ... }
};
, тогда я могу:
using Baz = bar::Foo;
, и теперь это так же, как я определил класс в своем пространстве имен с помощьюимя Baz.
Можно ли сделать то же самое для функций?
namespace bar
{
void f();
}
А затем:
using g = bar::f; // error: ‘f’ in namespace ‘bar’ does not name a type
Какой самый чистый способ сделать это?
Решение также должно выполняться для шаблонных функций.
Определение: Если какая-то сущность B является псевдонимом из A, чем при любом или всех случаях использования(не декларации или определения, конечно) A заменяются на B в исходном коде, а сгенерированный (раздетый) код остается тем же.Например, typedef A B
это псевдоним.#define B A
это псевдоним (как минимум).T& B = A
не является псевдонимом, B может эффективно реализовываться как косвенный указатель, тогда как "unaliased" A может использовать "непосредственную семантику".