C++11:如何为函数添加别名?[重复]
- 2024-10-17 08:46:00
- admin 原创
- 72
问题描述:
如果我在命名空间 bar 中有一个 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 A B
是别名。 #define B A
是别名(至少)。 T& B = A
不是别名,B 可以有效地实现为间接指针,而“无别名”的 A 可以使用“直接语义”。
解决方案 1:
您可以使用完美转发定义函数别名(需要做一些工作):
template <typename... Args>
auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) {
return f(std::forward<Args>(args)...);
}
即使f
重载和/或函数模板,此解决方案也适用。
解决方案 2:
函数指针constexpr
可以作为函数别名。
namespace bar
{
int f();
}
constexpr auto g = bar::f;
很有可能(但语言不保证)直接g
使用bar::f
。具体来说,这取决于编译器版本和优化级别。
以下情况尤其如此:
GCC 4.7.1+,无优化,
Clang 3.1+,无优化,
MSVC 19.14+,已优化。
查看这些编译器生成的汇编代码。
解决方案 3:
类是类型,因此它们可以用typedef
和作为别名using
(在 C++11 中)。
函数更像对象,因此没有为它们设置别名的机制。你最多可以使用函数指针或函数引用:
void (*g)() = &bar::f;
void (&h)() = bar::f;
g();
h();
同样,没有用于给变量添加别名的机制(除非通过指针或引用)。
解决方案 4:
可以将函数引入到不同的作用域而不更改其名称。这意味着你可以使用不同的限定名称为函数添加别名:
namespace bar {
void f();
}
namespace baz {
using bar::f;
}
void foo() {
baz::f();
}
解决方案 5:
绝对地:
#include <iostream>
namespace Bar
{
void test()
{
std::cout << "Test
";
}
template<typename T>
void test2(T const& a)
{
std::cout << "Test: " << a << std::endl;
}
}
void (&alias)() = Bar::test;
void (&a2)(int const&) = Bar::test2<int>;
int main()
{
Bar::test();
alias();
a2(3);
}
尝试:
> g++ a.cpp
> ./a.out
Test
Test
Test: 3
>
引用是现有对象的别名。
我刚刚创建了一个函数的引用。该引用的使用方式与原始对象完全相同。
解决方案 6:
这不是标准 C++,但大多数编译器都提供了实现此目的的方法。使用 GCC,您可以这样做:
void f () __attribute__ ((weak, alias ("__f")));
这将创建符号f
作为 的别名__f
。使用 VC++,您可以按以下方式执行相同的操作:
#pragma comment(linker, "/export:f=__f")
解决方案 7:
你可以使用旧的宏
namespace bar
{
void f();
}
#define f bar::f
int main()
{
f();
}
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD