【发布时间】:2011-05-25 05:00:41
【问题描述】:
我有以下代码sn-p:
void foo(double a) {}
namespace bar_space
{
struct Bar {};
void foo(Bar a) {}
}
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
}
}
这在我的 Fedora 和 Mac 上都无法在 gcc 上编译。
打电话
foo(5.0)
来自命名空间之外或使用
namespace bar_space
{
::foo(5.0)
}
工作正常,但这并没有使我的新功能像我希望的那样好(其他开发人员也在 bar_space 中工作)。
bar_space 是否隐藏了原来的功能?有没有办法让 foo(5.0) 可以在 bar_space 内调用而无需显式范围 (::)?任何帮助表示赞赏。
【问题讨论】:
-
我是 C++ 的新手,但你能用
using bar_space::foo;这样的东西吗? -
这将有助于在 bar_space 之外使用 foo(Bar),但不会让 foo(double) 进入 bar_space。
-
类似的东西是可能的:codepad.org/0IcNXZb6
标签: c++ overloading