2017-07-06 5 views
3

これはにフォローです:私は、名前空間の名前を変更する必要があるが、後方互換性を維持したいこのコードを複製せずに複数の名前空間に複数の関数を配置するにはどうすればよいですか?

How do I put some code into multiple namespaces without duplicating this code?

。上記の解決策は、私はそれぞれ、すべての機能のためにそこで行われている何をしなければならないことを示唆している:

namespace NewNamespaceName 
{ 
     void print() 
     { 
       //do work... 
     } 
     // 50 other functions 
} 

namespace OldNameSpaceName 
{ 
     using NewNamespaceName::print; 
     // 50 other using declarations 
} 

私の質問:これを行うための簡単な方法はありますか?

+2

すべてを一意の名前空間に入れ、フルネームスペース(おそらく 'inline')を'使用する '。 – Jarod42

+0

'NewNamespaceName'に' OldNamespaceName'に含まれていなければならないシンボルがある場合は、他の選択肢はありません。おそらくあなたはスクリプトでそれを自動化することができます。 –

答えて

1
あなたは、単に行うことができます

namespace NewNamespaceName 
{ 
     void print() 
     { 
       //do work... 
     } 
     // 50 other functions 
} 

namespace OldNameSpaceName 
{ 
     using namespace NewNamespaceName; 
} 

NewNamespaceNameは、他のものを持っている場合にはしたいが、彼らは、OldNamespaceNameになり、その後ちょうど別のプライベート名前空間を作成し、古い名前空間にそれをインポートしたいとは思わないでしょう

namespace NewNamespaceName 
{ 
     namespace Private { 
       void print() { ... } 
       // 50 other functions 
     } 
} 

namespace OldNameSpaceName 
{ 
     using namespace NewNamespaceName::Private; 
} 

ライブたとえばここhttps://wandbox.org/permlink/taRPm1hAd2FHbAYo

+0

'Private'は' inline'名前空間でなければなりません。少なくとも、 'NewNamespaceName'の内部に' Namespace Private 'を使うべきです。 – Angew

+0

私はそれが大好きです! NewNamespaceNameの中に 'using namespace Private; 'を追加できますか?すると、すべての共有関数は 'NewNamespaceName :: print()'と 'OldNameSpaceName :: print()'を介してアクセスできます。あるいは 'Inline namespace Private'も同じことをしますか? – Fabian

+0

@Fabian yep!あなたが望むなら、あなたはそれを行うことができます。最後にhttps://wandbox.org/permlink/taRPm1hAd2FHbAYoにこのリンクを含めるように私の答えを更新しました。 – Curious

6

ただ、名前空間のエイリアスを使用します。

namespace OldNameSpaceName = NewNameSpaceName; 
関連する問題