2月 212014
 

どうも。お久しぶりです。
色々と書きたいこと、やりたいこと、あるんですけども、なんだかんだで就活大変ですね。まあまあ頑張ってます。

それはともかくとして、今回はC++の話です。

とあるSDKがヘッダでusing namespace std;してるって話題を見まして、要は、名前空間を汚す(※)のって良くないよね行儀悪いよねということですよね。でも、名前空間の指定を省略できるようにすれば、冗長さがなくなって実装しやすいわけですから、グローバルな名前空間を汚さずにその恩恵を受けたいものです。たとえば、あるクラスがstd::vectorとかstd::stringとかメンバ変数に持っていたり、メンバ関数の引数や戻り値に持っていたりしたら、私は冗長に思うわけです。クラス定義の範囲でusing namespace(using指令)したいよねと。あるいは、クラス名を直接指定するusing宣言でもいい。しかし、どちらもクラス定義に書けないわけです。

という話題を投げたら、typedefでできる?って言われまして。あ、できるねと。テンプレート書いてる時ぐらいにしかtypedef使ってなかったので盲点になってました。せっかくなので、usingとtypedefを使ってみて、どんな違いがあるのか確めてみようと思いました。これが今回の内容になります。

※「名前空間を汚す」以外の言い回しが思いつきませんでした。ここでいう「名前空間」は、C++の言語機能である名前空間(namespace)ではなくて、一般的な意味での名前空間です。混乱させてたらごめんなさい。

Continue reading »

Top