C++相談室 part34
■ このスレッドは過去ログ倉庫に格納されています
0001v(^・^)v
NGNGただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。
過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNGタコ助だな
0256デフォルトの名無しさん
NGNG生のソケットを渡したりするから、生ソケットにアクセスする手段は
必要だって。完全なカプセル化じゃなくFacadeと考えた方がいい。
0257デフォルトの名無しさん
NGNGsetsockoptし忘れて・・・なんてことが
環境依存で起こりまくりですよもう
0258デフォルトの名無しさん
NGNG>>255
通信プログラム初心者は黙ってた方がいいね。
0259デフォルトの名無しさん
NGNG#include <iostream>
int main()
{
std::cout << "hello\n";
}
こういうエラーが出てきます。どなたか解る方がいましたら教えてください。
cstdlib(22): error C2873: 'exit' : シンボルを using 宣言の中で使用することはできません。
cstdlib(19): error C2873: 'abort' : シンボルを using 宣言の中で使用することはできません。
cstdlib(22): error C2039: 'exit' : 'operator``global namespace''' のメンバではありません。
cstdlib(19): error C2039: 'abort' : 'operator``global namespace''' のメンバではありません。
0260デフォルトの名無しさん
NGNGあとsignalも
0261デフォルトの名無しさん
NGNG#include <cstdlib>
0262デフォルトの名無しさん
NGNG必死でググりながら調べてるのかな?
勤勉で結構。
0263デフォルトの名無しさん
NGNG再インストールでしょうか。。。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG> 環境依存部をラップする事が不可能って断言
具体的にどのレス?
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGそんなこと稀だし、ドキュメントに不備あるし、
OSのverupやパッチで動作変わったりするし
だから結局 >>256 のいうような形になると思うんだ
想像がつかない奴もいるようだが
0269デフォルトの名無しさん
NGNGだからカプセル化するんじゃねーのか?
つうかメンバ変数に直アクセス出来るようにしとくってギャグか?
0270デフォルトの名無しさん
NGNG>>269は、ソケットプログラム作ったことないの?
0271デフォルトの名無しさん
NGNG> メンバ関数でやれることは、限りなく「お約束」処理だけだよ。
んなわきゃない。
俺はネットわープログラミングは専門外のゲーム屋だが、メンバ変数を
直接触らせるような設計にはしてないぞ。機種固有のメンバ関数を定義
することはあるが。
実務経験があるから偉いってわけじゃなし、「ソケットプログラム作った
ことないの?」なんていわずに、もすこし具体的な指摘をしとけ。
あとネットワークの話に絞りたいなら、スレ違いだから続きは
よそで頼む。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNGラッピングの目的にもよるような気がしてきたなあ
javaやmfcみたいな、大勢向けのフレームワークなのか、
ちょっとした共通化を施したいだけの話なのか・・・
>>269
> だからカプセル化するんじゃねーのか?
仕様が決まればカプセル化できるのはアタリマエのような・・・
(と別のスレで似たことを書いたな)
>>270
ゲーム屋はそこで動けば済む話だから楽だよね。
0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNG> ヒントをいうと、あまりカプセル化しすぎないこと。
> メンバ変数に直接アクセス出来るようにしておく事をお奨めする。
> デストラクタ機能はあくまでオマケ感覚のつもりで。
このくらい低い目標を持った方がいいということ。無理はいかん。
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNGお約束なるものをコードで表現するのがクラスでありメンバ関数では?
約束(仕様)に沿って提供する機能(メンバ関数)を設けて、
その実装(内部仕様)は外部から見えなくするというのがクラスではないかと。
お約束以外にいろいろできるようにするというなら、そもそもクラスを使う
意義がなくなるような気がするんです。
メンバ変数を外部から操作できてしまうと、メンバ関数の動作において
状態を把握・管理できかねる状況が生じませんか?
なんでもありにするなら、最初からクラスにせず、普通にCのライブラリのように
直接的に使うほうが楽な気もします。
0278デフォルトの名無しさん
NGNG場合によるが、ソケットやファイルでスクリプタを public にするのは
かなり終わってると思われ。
0279デフォルトの名無しさん
NGNGそれだとそれに最適な実装方法を持ち出して、それで終わりだからなー。
とはいえ >>278 は何もわかってないな
0280デフォルトの名無しさん
NGNG> 意義がなくなるような気がするんです。
これも頭痛いな。
0281デフォルトの名無しさん
NGNGコテハンつけてくれ。
メンバ変数を公開しないというのは、それを公開すると状態の一貫性を
保ちにくくなるから。たとえば文字列クラスで文字列を記憶するバッファと、
文字列長をメンバ変数にしていた場合、それを公開したら容易に矛盾
する状態を作れてしまう。
ソケットも同様で、ソケットを直接ユーザに見せたらソケットのオープン・
クローズ状態などをライブラリ側で把握できなくなってしまい、エラー処理や
assert() による実行時検査が事実上不可能になる。
Win32 のハンドルのように、すでに OS 側で管理機能が入ってる場合は
ともかく、生のソケットやファイルでスクリプタを直接ユーザに露出すると
誤用に対してきわめて脆弱なライブラリになってしまう。小規模なプログラム
ならそれでも良いんだが、規模がちょっと大きくなったり、複数のプログラマが
共同で作業する場合には、そのエラー検出・バグ取りの時間が馬鹿にならん。
0282デフォルトの名無しさん
NGNGそういう奴にsocketを触らせる時点ですでに間違ってると思う。
0283デフォルトの名無しさん
NGNGで、終了でいいんじゃない?
後はOOP一般論スレにでも行って。
0284デフォルトの名無しさん
NGNGだからカプセル化するんだが? (w
0285デフォルトの名無しさん
NGNGラッパーとしてだけにしかクラスを使う事が出来ないんだよ。
抽象化とかそういったことはハナから頭にない。
0286デフォルトの名無しさん
NGNG静的な世界のことしか考えてない人たちがライブラリ設計しちゃイカンと思う
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNGそういうことだね。
C++使って書かれsocketプログラムというのを何個かみたことがあるけどありゃC++じゃねぇ。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGなんでそこまで張り切るのかが分からん
ガチガチに作っても、OSのパッチひとつでダメになるのは目に見えてるのに
その例がjavaのsocket。
抽象化の工数はもっと意義のあるところに使おうぜ。
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG不必要なところまで低レベルな機能を提供しなけりゃいい。
socketなんてクラスはsocketそのまんまだし(.NETも然り)
0294デフォルトの名無しさん
NGNG結局そこに行き着くと思うんだがなあ・・・
このスレで頑張ってる抽象バカって、単純に
socket_some_func_01(socket, params);
を
socket->some_func(params);
に置換して満足してるんだろうか。
この程度で抽象化なんてほざいてたらイタいが。
0295デフォルトの名無しさん
NGNGjavaのsocketの歴史を見ると笑えるよ。
だんだん低レベルなメソッドが追加されてくの。
NIOではとうとう分離しちゃったけどな。つまるところ、破綻。
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG> だんだん低レベルなメソッドが追加されてくの。
メンバをpublicすることとは、全く別の話だが?
>>294
> このスレで頑張ってる抽象バカって、単純に
> socket_some_func_01(socket, params);
> を
> socket->some_func(params);
> に置換して満足してるんだろうか。
プラットフォームの違いを、型システムで扱えるのだが?
0299デフォルトの名無しさん
NGNGJavaなんてどうでもいいから。
0300デフォルトの名無しさん
NGNG意味わからん。
覚えたての単語を使ってみようなんて思わなくていいから。
0301デフォルトの名無しさん
NGNG満足してるのはお前だけ。お前用のクラスは
class socket { public: int socket; };
だけで良いじゃん、どうせメンバ関数すべて標準関数へのスタブにするんだろうし。
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG考え方が違うんだろうし、無理に意見一致させる必要も無いし。
0304デフォルトの名無しさん
NGNGACEの設計が理解できない池沼
0305デフォルトの名無しさん
NGNG実戦でやられると迷惑なだけだが。
0306デフォルトの名無しさん
NGNGこんなクソ言語を使ってるダメプログラマは腹をくくって死ぬべきだ。
0307デフォルトの名無しさん
NGNG【厨房】言語叩き討論スレッド【隔離】
http://pc5.2ch.net/test/read.cgi/tech/1064841627/
0308デフォルトの名無しさん
NGNGという定義があった場合に、これをどのように理解すればいいのでしょうか?
aaa<bbb>をcccとして置き換える、というところまでわかりまっす。
でもaaa<bbb>の括弧の部分がわかりません。
これは、C++独自の仕様なのでしょうか?
どなかた、ご教授お願いします。
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNGそれではさっぱりわかりません!!!!!
0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNGという定義などない
0313デフォルトの名無しさん
NGNGのような宣言のことだろうな
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG× ><313
○ >>313
0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGテンプレーって何ですか?
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNGあ、テンプレートか。
なるほどね。
0321デフォルトの名無しさん
NGNGstd::stringからCORBA::W_String_varに変換する方法を教えてください。
0322デフォルトの名無しさん
NGNGDWORD* Dw;
::GetFileSize(FHnd,Dw);
こう書くと"値のない変数を参照しました。"と警告がでます。
値があればいいのだから、
DWORD* Dw = 0;
::GetFileSize(FHnd,Dw);
こう書けってことですか?
それとも他に書き方があるんでしょうか?
0323デフォルトの名無しさん
NGNG::GetFileSize(FHnd,&Dw);
じゃダメか?
0324デフォルトの名無しさん
NGNGできました!ドウモアリガトウ
0325デフォルトの名無しさん
NGNG出来ましたじゃねーよ
お前はCやめるか必死でポインタ勉強するのどちらかだろ
GetFileSizeとか書いてる場合じゃねーよ
0326デフォルトの名無しさん
NGNG【初心者歓迎】C/C++室 Ver.8【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1091264964/
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNGclass B
{
private:
~B() {}
};
class D: public B
{
//~D() {}
};
これがコンパイルを通ってしまうんだけど標準的にはどうなの?
ちなみに、コメントを解除するとちゃんとエラーになるんだけど。
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNGおそらく
D d;
と実際に変数を定義すると、その段階で D::~D() をコンパイラが作ろうとして
コンパイルエラーになるんじゃない?
0332329
NGNGまあ悪名高き某VC6だけど、
タダのVC Toolkit 2003でも試したら、警告は出たけどコンパイルは通った。
>331
それならVC6でもエラーになったけど。
D *d = new D;
delete d;
この場合だと通ってしまいます。
0333デフォルトの名無しさん
NGNGせずともD d;の時点でコンパイルエラーになって通らない。
ポインタに書き換えてもコンパイルエラーになって通らない。
0334デフォルトの名無しさん
NGNG5
デストラクタが暗黙的に宣言されているクラスがinaccessibleな
デストラクタを持った基底クラスを持っている場合、プログラムは
不適格(ill-formed)である。
多分>>329は、D d;としてもD* d=new D;としても通らないのが正しい。
0335デフォルトの名無しさん
NGNG悪名高くないだろVC6。
何と比較して言ってんの?
0336デフォルトの名無しさん
NGNGforのスコープがあんなにひどいコンパイラはVC++6くらいだろ
0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG素人まるだしだからやめとけ
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNG呼んだ?
0343デフォルトの名無しさん
NGNGえーっと、「・・・」が帰ってくるのを期待してたのかな?
forのスコープ問題って散々既出だけど、コンパイルスイッチで制御できるし
出た当時の仕様には準拠していたはずだよね。
VC6が出た時代背景も考慮に入れるなら、
叩けるところはnewがbad_alloc投げない事くらいでないの?
>>340
付属STLはパッチ出ててバグ修正されてるはず
Dinkumwareのページになかったっけ?
0344デフォルトの名無しさん
NGNGこれはかなり問題ではないかと…
0345デフォルトの名無しさん
NGNGそうだっけ?
本当にそうだったら、これほどいつまでもウダウダ言われないと思うし、
#define for if (0) ; else for
なんてのがまかり通る事もないと思うけど。
0346デフォルトの名無しさん
NGNGDinkumwareのページ古くて、SP5以降だといくつか直ってたり修正ファイルの方が古かったりする。
結局差分とってソース追って正しいか確かめるのに大変だった。
0347デフォルトの名無しさん
NGNG_set_new_handler()でどうにかなるし。
>>345
forのスコープはコンパイラスイッチで変更できるが、変更した場合付属のライブラリ群の動作が保証されないとかだった気がするが。
0348デフォルトの名無しさん
NGNGnew_handler 書いたり、アロケータ用意したりとかマンドクセ
0349デフォルトの名無しさん
NGNGってやるのと、必要になる都度
std::
ってやるのとどっちがいいですか?
あと、どっちの方が主流なコーディングですか?
0350デフォルトの名無しさん
NGNGusing namespace std; しちゃうと string, vector, list, map 等々、
ありきたりな名称で名前空間を汚されるのが嫌。てかうっかり名前
被らせて知らぬ間にバグを埋め込みそうで怖い。
0351デフォルトの名無しさん
NGNGやはり std:: ってやる方がいいですか。
せっかく分けた名前空間をごっちゃにしちゃ意味ないですもんね。
ありがとうございました
0352デフォルトの名無しさん
NGNG重要なのはコンパイルスイッチでの制御の可否じゃなくて、当時の仕様だ。
>>347
windows.hが通らないだけだった気がする
■ このスレッドは過去ログ倉庫に格納されています