c++ - 如何解决类名和函数名之间的名称冲突
问题描述
在 C++ 的同一个命名空间中是否有任何(好的)方法可以在同一个命名空间中拥有同名的类和全局函数?
下面的代码无法编译,因为它更喜欢函数而不是类名。
void PrintNumber( int val )
{
std::cout << "from function: " << val << std::endl;
}
struct PrintNumber {
void operator()( int val ) const
{
std::cout << "from operator: " << val << std::endl;
}
};
int main()
{
auto f1 = std::function<void(int)>( PrintNumber() ) ; // Functor class instance // ERROR occurs here
auto f2 = std::function<void(int)>( PrintNumber ) ; // Global function
f1( 123 );
f2( 456 );
cin.get();
}
解决方案
使用全名struct PrintNumber
。这不能直接在您的初始化中完成std::function
:
#include<iostream>
#include<functional>
struct PrintNumber {
void operator()( int val ) const
{
std::cout << "from operator: " << val << std::endl;
}
};
void PrintNumber( int val )
{
std::cout << "from function: " << val << std::endl;
}
int main()
{
struct PrintNumber p;
auto f1 = std::function<void(int)>( p ) ; // Functor class instance occurs here
auto f2 = std::function<void(int)>( PrintNumber ) ; // Global function
f1( 123 );
f2( 456 );
std::cin.get();
}
尽管最好更改名称或名称空间以避免歧义。
推荐阅读
- windows - 传递参数时,带有 docker 命令的 Bash 脚本未运行 | 环境:带有 docker 桌面的 WSL2
- php - PHP / 高级自定义字段 (ACF) - 删除重复值
- r - 在没有循环函数的情况下增加情节持续时间向量的数据分辨率
- python - 使用 python psycopg2 到 postgres 执行数据更新插入时,哪个是首选选项?
- http-headers - 将 HTTP 响应 Content-Type 指定为 image/* 是否正确?
- javascript - 为什么我们应该在将一些数据放入这个缓冲区之前调用 webgl.bindBuffer?
- c++ - 加载共享库时出错:libSDL2-2.0.so.0
- google-cloud-platform - 如何使用 gsutil rsync。登录并将存储桶内容下载到本地目录
- sql - 用于过滤 80 多列的高效过滤器查询
- python - 努力在 python 中使用 main()