2016-03-31 9 views
0

は私が がどのように私は達成することができ、この利便-層::アルゴリズム

void fun(std::vector<int> & vec) 
{ 
    std::sort(vec,my_comp); 
} 

質問のようなものを書きたい書き込み

void no_fun(std::vector<int> & vec) 
{ 
    std::sort(vec.begin(), vec.end(),my_comp); 
} 

の階層だと

これまでに何を試したか

namespace std 
{ 

template<typename T> 
void sort(std::vector<T> & vec) 
{ 
    sort(vec.begin(), vec.end()); 
} 

template<typename T, class Compare > 
void sort(std::vector<T>& vec, Compare comp) 
{ 
    sort(vec.begin(), vec.end(), comp); 
} 

} 

私は、Visual Studio 2013でそれをテストしたが、それはすべての

+2

'std'名前空間に何も追加しないでください。 – Dennis

+1

関数や関数オーバーロードを 'namespace std'に追加することはできませんが、これらの関数をこの名前空間の外に置くことができます。いずれにしても、「うまくいきません」というエラーがどんなものであるかを明確にして、私たちにはあまり教えてくれません。 – interjay

+2

[namespace.std]の範囲ライブラリ –

答えて

3

まず動作しない、あなたのno_fun()が本当にイテレータの組(別名範囲)とないコンテナ参照を取る必要があります。 C++で範囲がまだ存在しない理由、およびコンテナが適切な範囲に暗黙的に変換されない理由は、ここでは問題になりません。

using std::begin; 
using std::end;  
#define ALL(c) begin(c), end(c) 

ようなマクロを定義し、これとは別に、あなたがしたいかもしれない一つのことは、次に、あなただけのヘッダファイルに入れないようにしてください

std::sort(ALL(your_vec)); 

を書くことができています。

+0

ヘッダーに入れないのはなぜですか? – user1235183

+0

あなたがすると、何かがすぐに壊れるからではありません。しかし、あなたはグローバルな名前空間を汚染し、いつかはそれを返すかもしれません。 – Slava

+3

@ user1235183 3文字マクロでグローバルな名前空間を汚染すると、狂気が起こるでしょう。これは公平な警告です:) –

関連する問題