Вызов функции, перегруженной в нескольких пространствах имен, из одного пространства имен

У меня есть следующий фрагмент кода:

void foo(double a) {}

namespace bar_space
{
  struct Bar {};

  void foo(Bar a) {}
}

foo (double) - это общая функция из библиотеки. У меня есть собственное пространство имен bar_space с моей собственной структурой Bar. Я хотел бы реализовать перегрузку foo () для Bar, тем самым сделав Bar более похожим на встроенные типы.

Проблема возникает, когда я пытаюсь вызвать исходный foo (double) из пространства имен:

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

Это не может быть скомпилировано на gcc как на моей Fedora, так и на Mac.

Вызов

foo(5.0)

из-за пределов пространства имен или использование

namespace bar_space
{
  ::foo(5.0)
}

работает нормально, но это не делает мою новую функцию такой красивой, как я надеялся (другие разработчики также работают внутри bar_space).

Bar_space скрывает исходную функцию? Есть ли способ сделать foo (5.0) вызываемым из bar_space без явной области видимости (: :)? Любая помощь приветствуется.

7
задан Christian Askeland 14 December 2010 в 10:41
поделиться