为类型、变量或命名空间创建新名称很容易。但是如何给函数指定一个新名称呢?例如,我想使用printf的名称holler。#定义是显而易见的...还有别的办法吗?
解决方案:
#define holler printfvoid (*p)() = fn; //function pointervoid (&r)() = fn; //function referenceinline void g(){ f(); }发布于 2013-09-20 22:59:58
有不同的方法:
使用带有非模板非重载函数的C++11的
old_fn_name;
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);
发布于 2010-06-16 21:22:12
您可以创建函数指针或函数引用:
void fn()
{
}
//...
void (*p)() = fn;//function pointer
void (&r)() = fn;//function reference发布于 2010-06-16 21:21:31
typedef int (*printf_alias)(const char*, ...);
printf_alias holler = std::printf;对你来说应该没问题。
https://stackoverflow.com/questions/3053561
复制相似问题