当前位置: 首页 > 面试题库 >

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

叶经略
2023-03-14
问题内容

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


问题答案:

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

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

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



 类似资料:
  • 在我的代码中,我使用了一个带有“查询文本更改”的函数,但它只受android 11的支持,这是一个简单的搜索栏。如何验证当前版本的android,并显示不同的活动?谢谢

  • FAQs in section [11]: [11.1] 析构函数做什么? [11.2] 局部对象析构的顺序是什么? [11.3] 数组中的对象析构顺序是什么? [11.4] 我能重载类的析构函数吗? [11.5] 我可以对局部变量显式调用析构函数吗? [11.6] 如果我要一个局部对象在其被创建的代码块的 } 之前被析构,如果我真的想这样,能调用其析构函数吗? [11.7] 好,好;我不显式调用

  • 我想在C++11中使用多线程来调用一个类成员函数在它自己的线程中。我已经能够让它与全局函数一起工作:

  • 本文向大家介绍c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind,包括了c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind的使用技巧和注意事项,需要的朋友参考一下 一、符号修饰与函数签名 1、符号修饰 编译器将c++源代码编译成目标文件时,用函数签名的信息对函数名进行改编,形成修饰名。G

  • 我有一些家庭作业,我很难理解(可能)如何将参数传递给std::线程构造函数。 假设以下代码(我删除了不需要的部分) 为什么不编译?MVS2015在抱怨 函数式(1195):错误C2064:术语不计算为采用1个参数的函数函数式(1195):注意:类没有定义“运算符()”或用户定义的转换运算符到指针到函数或引用到函数,它需要适当数量的参数 注意:在编译类模板成员函数时'Scheduler 而G 4.9