如果我在命名空间栏中有一个类 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 可以有效地实现为间接指针,而“未别名”的 A 可以使用“立即语义”。
原文由 Andrew Tomazos 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用完美转发来定义函数别名(有一些工作):
即使
f
被重载和/或函数模板,此解决方案也适用。