C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: インスタンス化のタイミングについて


(過去ログ 61 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■35419 / inTopicNo.1)  インスタンス化のタイミングについて
  
□投稿者/ white (1回)-(2009/04/29(Wed) 17:27:28)

分類:[C/C++] 

最近、私はメタプログラミング(Boost.MPLなど)を少しだけ
触りはじめて、疑問がでてきました。

以下の様なクラスがある時
struct Foo
{
public:
	Foo(){};

};
Foo foo; や Foo* foo = new Foo; の様にインスタンス化します。
これは理解できます。


では、以下の様なクラスがある時
template<class T>
struct Hoge
{
	typedef  type;
	static const int value = 10;
private:
	Hoge(){};

};

Hoge<int> hoge;
はコンストラクタがprivateなのでコンパイルエラーとなります。(これも理解できます)

しかし、以下の様にネストした型や変数にアクセスした時も
Hoge<int>のインスタンス化を行うみたいですが、
コンストラクタがprivateにも関わらずコンパイルエラーになりません。
(実行もできます)

Hoge<int>::type
Hoge<int>::value

Foo foo; や Hoge<int> a; の様なインスタンス化と
ネストした型や変数にアクセスする際のインスタンス化は
違うのでしょうか?

「インスタンス化 == コンストラクタが呼ばれる」というイメージは
間違ってるのでしょうか?

引用返信 編集キー/
■35420 / inTopicNo.2)  Re[1]: インスタンス化のタイミングについて
□投稿者/ white (2回)-(2009/04/29(Wed) 17:30:21)
No35419 (white さん) に返信
> template<class T>
> struct Hoge
> {
> typedef type;  
> static const int value = 10;
> private:
> Hoge(){};
>
> };
訂正
× typedef type; 
○ typedef T type; 
引用返信 編集キー/
■35422 / inTopicNo.3)  Re[2]: インスタンス化のタイミングについて
□投稿者/ やんち (1回)-(2009/04/29(Wed) 18:03:31)
	typedef T type;
も
	static const int value = 10;
も
インスタンスフィールドではないので、インスタンス化は起こりませんよね。

引用返信 編集キー/
■35425 / inTopicNo.4)  Re[3]: インスタンス化のタイミングについて
□投稿者/ white (3回)-(2009/04/29(Wed) 18:24:15)
No35422 (やんち さん) に返信
> typedef T type;
> も
> static const int value = 10;
> も
> インスタンスフィールドではないので、インスタンス化は起こりませんよね。

何か勘違いしていたようです。
忘れてください。


解決済み
引用返信 編集キー/
■35427 / inTopicNo.5)  Re[4]: インスタンス化のタイミングについて
□投稿者/ 774RR (350回)-(2009/04/29(Wed) 19:37:30)
あえて解決済みに補足
この場合インスタンス化という用語の適用範囲が違うわけで。

Foo foo; の場合、クラスという「変数(オブジェクト)のモト」から変数が実体化している
Hoge から Hoge<int> の場合クラステンプレートという「クラスのモト」からクラスが実体化している
だから「インスタンス化」が起こらないというと微妙に語弊があるかもしんまい。

コンストラクタは「変数(オブジェクト)」の実体化の際に使われるので
クラスの実体化の際には無関係というか、クラスの実体化がされた後で使われるというか。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -