2012-04-16 11 views
2

私は2つの事の後です。私は最初vectorクラスを少し具体的なもの、例えばListのようなものにtypedefしたいと思っています。私は、次のことを試してみましたが、それは私のコンパイルエラーを与えた:既存のクラスの演算子をオーバーライドします

template <typename T> 
typedef vector<T> List<T> 

は、第二に、私はvectorクラスの<<オペレータを上書きしたいが、私は新しいクラスを作成せずにそれについて移動する方法を見当がつかない。

これは非生産的なように見えるかもしれませんが、最終的な目的はプログラマでない人(または以前はC++をやっていない人)が意味論的に読めるようにすることです。

+2

これは逆効果です。それについてのすべて。 –

+0

プログラマーとして、その反作用...しかし、私の最終目標を達成するために、それはまったくありません。 – Cheetah

+0

プログラマーがコードを読んでいないのはなぜですか?彼らがC++を学んでいないプログラマーなら、C++を学ぶ方が良いのは、あなたが言語の仕組みを隠すよりも優れているということです。 –

答えて

3

C++にはテンプレートtypedefがありませんが、C++ 11では代わりにusingを使用できます。

template<class T> 
using List = std::vector<T>; 
// ... 
List<int> foo; // aka std::vector<int> foo; 

演算子のオーバーロードは、クラスを変更することなく行うことができます。

template<class T> 
std::vector<T>& operator<<(std::vector<T>& vec, const T& value) { 
    vec.push_back(value); // or whatever you want to do. 
    return vec; 
} 

ちょうどどこかに入れて、それもstd::vectorのクラス定義の外で、動作するはずです。

+2

ベクトルに追加するための 'operator <<()'のオーバーロードは、[演算子のオーバーロードの基本規則](http://stackoverflow.com/a/4421708/140719)に違反しています:___ 1)___演算子の意味が明らかに明白で明白なことではありませんが、過負荷にならないようにしてください。 ___ 2)___オペレータのよく知られているセマンティクスに常に従います。 – sbi

+0

@sbi私は完全に同意しますが、これはOPが求めるものです。必要に応じて、そのメモを回答に追加することができます。 –

+0

私はすでにこれについてのメモを回答に追加しました。 '') ''(私はダウンボートしませんでしたが、長期的には傷つけることを指摘せずにこれを得ることはできませんでした) – sbi

5

これを行うと、プログラマー以外の人はコードを読み上げることはできません。しかし、C++プログラマはコードを読むのに多くの問題を抱えています。

もしそれらがコード化できず、コード化するためにC++プログラマーを必要とするのであれば、最初のC++プログラマーが書いたコードを理解し、維持し、拡張するためにはC++プログラマーが必要です。

OTOHの場合、C++でコード化する必要がある場合は、surprise! - C++コードの作成と読み込みを学ばなくてはなりません。

本当に間には何もありません。

+0

これに加えて、 'List'と' Vector'はプログラミングについて知らない人にとっても意味がありません。 Sbiの言葉のように、彼らはC++でプログラミングすることを学ぶ必要があるか、あるいはどのようにするかを知っている人を取得する必要があります。また、ある人がこのプログラミングに参加し始めたときに何が起こり、そのコードがどうしてこんなに混乱しているのかを考える必要があります。最初から正しく教えてください。 – thecoshman

+0

実際にはそうではありません。私の聴衆は正規表現を使ってVectorをListに変更したときにC++コードを完全に理解していました。私はライブデモ中にプログラマー以外の人たちが正しい提案をしていました。彼らは決してどのような変数を変更するか、どの変数をリストに追加する必要があるかなどを教えてくれるので、実際にはC++を書くことを学ぶ必要はありません。コードはそこにしかないので、彼らはa)進行中のものの完全なアルゴリズムを見ることができ、b)プログラマが大きな変更を加えたい場合、そうするコードがある。 – Cheetah

関連する問題