我有以下代码片段:
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)可以调用而不使用显式作用域(::)?任何帮助表示赞赏.