内部I次のコードスニペットがありますから、いくつかの名前空間にオーバーロードされた関数を呼び出す1つの名前空間
void foo(double a) {}
namespace bar_space
{
struct Bar {};
void foo(Bar a) {}
}
のfoo(ダブル)ライブラリーからの一般的な機能です。 私は自分の名前空間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)
}
は大丈夫動作しますが、私は(他の開発者でも内部の作業しているために期待していたとして、このdoesntのは、私の新しい機能はそれほど素敵作りますbar_space)。
bar_spaceは元の機能を隠していますか?明示的なスコープ(::)なしでbar_space内からfoo(5.0)を呼び出し可能にする方法はありますか?どんな助けもありがとうございます。
のようなものを使用することができ;'? – dreamlax
これは、bar_spaceの外側でfoo(Bar)を使用するのに役立ちますが、bar_spaceにfoo(double)を入れないようにします。 –
何かが可能です:http://codepad.org/0IcNXZb6 – DaVinci