一尘不染

C ++ 11:如何为函数命名?

linux

如果我在名称空间栏中有一个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可以使用“立即语义”。


阅读 278

收藏
2020-06-02

共1个答案

一尘不染

您可以使用完美的转发定义功能别名(需要做一些工作):

template <typename... Args>
auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) {
  return f(std::forward<Args>(args)...);
}

即使f过载和/或功能模板,此解决方案也适用。

2020-06-02