首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中为函数名分配别名?

如何在C++中为函数名分配别名?
EN

Stack Overflow用户
提问于 2010-06-16 21:19:10
回答 8查看 50.9K关注 0票数 112

为类型、变量或命名空间创建新名称很容易。但是如何给函数指定一个新名称呢?例如,我想使用printf的名称holler。#定义是显而易见的...还有别的办法吗?

解决方案:

  1. #define holler printf
  2. void (*p)() = fn; //function pointer
  3. void (&r)() = fn; //function reference
  4. inline void g(){ f(); }
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-09-20 22:59:58

有不同的方法:

使用带有非模板非重载函数的C++11的

  • ,您可以简单地使用:

old_fn_name;

  • If auto& new_fn_name = const这个函数有多个重载,你应该使用static_cast

const auto& new_fn_name = static_cast(old_fn_name);

示例:std::stoi函数有两个重载

int stoi (const string&,size_t*,int);int stoi (const wstring&,size_t*,int);

如果要为第一个版本创建别名,则应使用以下命令:

const auto& new_fn_name = static_cast(std::stoi);

注意:没有办法为重载函数创建别名,这样它的所有重载版本都可以工作,所以你应该始终指定你想要的确切的重载函数。使用C++14

  • 你可以使用constexpr模板变量。它允许你给模板化的函数取别名:

template constexpr void old_function(/* args */);template constexpr auto alias_to_old =alias_to_old从C++11开始,您有一个名为std::mem_fn的函数,它允许为成员函数指定别名。请参见以下示例:

结构A{ void f(int i) { std::cout <<“参数:”greet I << '\n';} };A a;auto greet= std::mem_fn(&A::f);//成员函数的别名//打印“参数: 5”greet(a,5);//每次使用此别名时都应提供一个对象//如果要永久绑定对象,请使用std::bind greet_a = std:: bind (greet,a,std::placeholders::_1);greet_a( 3);//相当于greet(a,3) => a.f(3);

票数 130
EN

Stack Overflow用户

发布于 2010-06-16 21:22:12

您可以创建函数指针或函数引用:

代码语言:javascript
复制
void fn()
{
}

//...

void (*p)() = fn;//function pointer
void (&r)() = fn;//function reference
票数 35
EN

Stack Overflow用户

发布于 2010-06-16 21:21:31

代码语言:javascript
复制
typedef int (*printf_alias)(const char*, ...);
printf_alias holler = std::printf;

对你来说应该没问题。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3053561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档