小编Chr*_*and的帖子

从一个名称空间内调用在多个名称空间中重载的函数

我有以下代码片段:

void foo(double a) {}

namespace bar_space
{
  struct Bar {};

  void foo(Bar a) {}
}
Run Code Online (Sandbox Code Playgroud)

foo(double)是库中的一般函数.我有自己的命名空间bar_space和我自己的结构,Bar.我想为Bar实现foo()的重载,从而使Bar更类似于内置类型.

当我尝试从命名空间内调用原始foo(double)时出现麻烦:

namespace bar_space
{
  void baz()
  {
    foo(5.0); // error: conversion from ‘double’ to non-scalar type ‘ssc::bar_space::Bar’ requested
  }
}
Run Code Online (Sandbox Code Playgroud)

这无法在我的Fedora和Mac上的gcc上编译.

调用

foo(5.0)
Run Code Online (Sandbox Code Playgroud)

从命名空间外部或使用

namespace bar_space
{
  ::foo(5.0)
}
Run Code Online (Sandbox Code Playgroud)

工作正常,但这并没有使我的新功能像我希望的那样好(其他开发人员也在bar_space内工作).

bar_space是否隐藏了原始函数?有没有办法让bar_space中的foo(5.0)可以调用而不使用显式作用域(::)?任何帮助表示赞赏.

c++ overloading

7
推荐指数
1
解决办法
1946
查看次数

标签 统计

c++ ×1

overloading ×1