Tengo el siguiente fragmento de código:Llamar a una función sobrecargada en varios espacios de nombres desde el interior de un espacio de nombres
void foo(double a) {}
namespace bar_space
{
struct Bar {};
void foo(Bar a) {}
}
foo (doble) es una función general de una biblioteca. Tengo mi propio espacio de nombres bar_space con mi propia estructura, Bar. Me gustaría implementar una sobrecarga de foo() para Bar, lo que hace que Bar sea más similar a los tipos incorporados.
El problema aparece cuando intento llamar al foo originales (doble) desde el interior del espacio de nombres:
namespace bar_space
{
void baz()
{
foo(5.0); // error: conversion from ‘double’ to non-scalar type ‘ssc::bar_space::Bar’ requested
}
}
Esta falla al compilar el gcc en tanto mi Fedora y Mac.
Calling
foo(5.0)
desde fuera del espacio de nombres o usar
namespace bar_space
{
::foo(5.0)
}
funciona bien, pero ésto no hacer que mi nueva función es tan bonito como lo que esperábamos (otros desarrolladores también están trabajando en el interior bar_space).
¿Está bar_space ocultando la función original? ¿Hay alguna manera de hacer que foo (5.0) se llame desde dentro de bar_space sin un alcance explícito (: :)? Cualquier ayuda es apreciada.
Soy un novato en C++, pero se puede usar algo como 'usando bar_space :: foo;'? – dreamlax
Eso ayudará a usar foo (Bar) fuera de bar_space, pero no obtener foo (doble) en bar_space. –
algo similar es posible: http://codepad.org/0IcNXZb6 – DaVinci