首页 > 解决方案 > 如何解决类名和函数名之间的名称冲突

问题描述

在 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();
}

标签: c++

解决方案


使用全名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();
}

尽管最好更改名称或名称空间以避免歧义。


推荐阅读