如果我在名称空间栏中有一个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 AB是一个别名。#defineBA是一个别名(至少)。T&B=A不是别名,B可以有效地实现为间接指针,而“非别名”A可以使用“立即语义”。
typedef AB
#defineBA
T&B=A
您可以使用完美的转发定义功能别名(需要做一些工作):
template <typename... Args> auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) { return f(std::forward<Args>(args)...); }
即使f过载和/或功能模板,此解决方案也适用。
f