C++で匿名クラスは作れますか? – プログラミング – Home

C++で匿名クラスは作れますか?
 
通知
すべてクリア

[解決済] C++で匿名クラスは作れますか?


ぴょぴょ
 ぴょぴょ
(@ぴょぴょ)
ゲスト
結合: 17年前
投稿: 82
Topic starter  

またお世話になります。

タイトル通りですが、C++でJavaのような匿名クラスは実装できますか?
やりたいことはクラスの中にクラスを記述したい。
ただしそのメンバクラスはクラス名を持たせたくない。

// ヘッダ
class foo {
public:
foo();
~foo();
class {
public:
int a();
} hoge;
};

// ソース
foo::foo(){}
foo::~foo(){}
int foo::__unnamed::a(){return 123;}

とりあえず上記の方法でコンパイルは出来ました。(ちゃんと動きます)
問題は__unnamedキーワードです。
これはVC++を使っているので処理系の独自拡張ですか?
それともC++の言語仕様で在るんでしょうか?
お聞きしたいことはC++言語仕様で匿名クラスは作れるのか?

[環境]
Windows XP
VC++2003.NET
C++歴1年ほど


引用未解決
トピックタグ
アキラ
 アキラ
(@アキラ)
ゲスト
結合: 23年前
投稿: 49
 

この場合だと、 a() の定義はインラインで書くしかないと思います。
__unnamed は VC++ の言語拡張でしょう。


返信引用
ぴょぴょ
 ぴょぴょ
(@ぴょぴょ)
ゲスト
結合: 17年前
投稿: 82
Topic starter  

アキラさんレスありがとう。

確かにインラインなら __unnamed は必要ありませんね。
でもインラインはヘッダファイルに記述しますよね。
もし匿名クラスがとても巨大だった場合(設計上問題ありそうだけど仮に)は
コンパイルに時間が掛かると思います。
これは避けては通れないのでしょうか?

ヘッダとソースに分離できればソースはOBJファイルまたはLIBファイルにして
リンクすれば早そうですが、インラインでは(分離など)は無理ですか?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

VC++ の言語拡張ではだめですか?
他OSでも使いたいので互換性を保ちたいとか?
VC++より言語仕様進んでいるんで、GCCも別にあるんじゃないかな
とおもいますが?


返信引用
アキラ
 アキラ
(@アキラ)
ゲスト
結合: 23年前
投稿: 49
 

> もし匿名クラスがとても巨大だった場合
こういう場合はおとなしく名前を付けたほうがいいと思います。
クラス内で行う処理をクラス化したいだけなら、PImplイディオムという手もありま
す。(クラス名は必要ですけど)

ちなみに、 __unnamed ですが、 VC++8.0/9.0(2005/2008) では使えませんでした。
(オプション必要なのかな?)


返信引用
ぴょぴょ
 ぴょぴょ
(@ぴょぴょ)
ゲスト
結合: 17年前
投稿: 82
Topic starter  

ITOさん。
アキラさん。
レスをありがとうございます。

いろいろと考えてダミーのクラス名をつけることにしました。

> ちなみに、 __unnamed ですが、 VC++8.0/9.0(2005/2008) では使えませんでした。
使えないようなら、匿名クラスではなくおとなしく名前を付けてクラスを作ります。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました