我有以下代码片段:
这段代码在我的Fedora和Mac上使用gcc编译失败。
调用
从命名空间外部或使用
我有以下代码片段:
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内部调用而不需要显式范围解析符(::)?任何帮助都将不胜感激。
using bar_space::foo;
这样的东西? - dreamlax