社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

自分自身の型(クラス)をあらわすキーワードが欲しい - Visual C++

ATL/WTLなどのテンプレートベースのライブラリでプログラミングを行う場合、
基底クラスの型や自分自身の型を記述する必要がでてくることがあるかと思います。

基底クラスをあらわすキーワード(__super)は、VC7で追加されましたが、
自分自身の型をあらわすキーワードは、ありません。
現状では、typedef を使って自分自身の型を定義するしかありませんが、
これは大変面倒ですし、ヒューマンエラーを誘発させてしまいます。

なので、自分自身の型をあらわすキーワードが欲しいですね。
私には、__thisといったキーワードくらいしか思いつきませんが。


■super, __super - MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/key_s-z_1.asp

投稿日時 : 2005年10月4日 10:10


コメントを追加

#  re: 自分自身の型(クラス)をあらわすキーワードが欲しい - Visual C++ 2005年10月7日 15:40 菊池

んーと

template <class T>
class Hoge<T>
{
public:
typedef Hoge<T> CLASS;
private:


}

のCLASSを示すキーワード?

const とか、参照とか、ポインタとかのバリエーションで色々定義して使ってるので焼け石に水っぽい気がします。

#  re: 自分自身の型(クラス)をあらわすキーワードが欲しい - Visual C++ 2006年1月24日 22:05 通りすがりP

自分自身の型(クラス)をあらわすキーワードが欲しい、私もほしいです。

 菊池さんの方法、結構うまいと思ったんだけど、

class abc {
public:
typedef abc __this ;
__this ppp(void) {
return *this ;
}
};//abc
//---
class abc2:public abc {
public:
typedef abc2 __this ;
};
//---
int main() {
abc2 a,b ;
b=a.ppp() ;//エラー pppの戻り値はabc型

return 0 ;
}
//---
のようなときは、abc=>abc2に型変換できない、と怒られます。
つまり、メンバ関数pppは、abc型の戻り値を持つ物として作成され、
継承してもその型情報がそのまま引き継がれる(当然といえば当然なのだけど)
私としては、継承後のクラスについては、継承後の型を持つようなキーワード
がほしいです。

#  re: 自分自身の型(クラス)をあらわすキーワードが欲しい - Visual C++ 2007年8月12日 19:23 RAPT

> のようなときは、abc=>abc2に型変換できない、と怒られます。
> つまり、メンバ関数pppは、abc型の戻り値を持つ物として作成され、
> 継承してもその型情報がそのまま引き継がれる(当然といえば当然なのだけど)
> 私としては、継承後のクラスについては、継承後の型を持つようなキーワード
> がほしいです。
template なら、そんなことないです。
菊池さんの例でいけば、コンパイル時に継承したクラスの型になります。

class Foo1 : public Hoge< Foo1 >
{
// snip
};


class Foo2 : public Hoge< Foo2 >
{
// snip
};
タイトル
名前
URL
コメント