Если у меня есть класс Foo в пространстве имен бар:C++ 11: Как выполнить функцию?
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
Что такое чистый способ сделать это?
Решение также должно содержать функции шаблона.
Определение: Если какой-то объект В является псевдоним А, чем если какие-либо или всех вхождений (не деклараций или определений, конечно) из A заменены B в исходном коде, чем (раздели), порожденную код остается прежним. Например, typedef A B
является псевдонимом. #define B A
- псевдоним (по крайней мере). T& B = A
не является псевдонимом, B может эффективно реализоваться как косвенный указатель, если «unaliased» A может использовать «непосредственную семантику».
, что это такое, что вы хотите достичь? Если вы заявляете, что вам действительно нужно, возможно, будет возможно предоставить альтернативы, но, как бы то ни было, неясно, что вы имеете в виду под псевдонимом * –
@ DavidRodríguez-dribeas: Существует мало путаницы в отношении того, что означает «псевдоним» в выше. В общем случае, если B является псевдонимом A, чем если вы замените использование A на B, то сгенерированный код останется неизменным. Почему вы хотите, чтобы это было просто. Я хочу дать библиотечной функции второе имя/пространство имен. Я подозреваю, что самый чистый способ - просто обернуть вызов старого имени с помощью функции always_inline нового имени. Обертка будет скомпилирована, оставив что-то неотличимое от прямого вызова старого имени по желанию. –
Ну, еще не ясно, например, соответствует ли указатель функции, определенный в пространстве имен назначения, вашим требованиям или нет. Это не одна и та же функция, но ваша программа может идти вперед, даже не замечая (есть ситуации, когда это имеет значение, но они не так уж и общие). Кроме того, вы не указали, нужно ли вам другое имя или просто другое пространство имен, поэтому * использование-декларация * также может удовлетворить ваши потребности ... Не забудьте спросить о том, что вам нужно, поскольку это то, что позволяет использовать различные альтернативы что может не соответствовать вашему текстовому описанию. –