■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part17
1 名前:v(^・^)v :03/03/13 21:54
C++に関する質問はこちらへどうぞ。
ただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。

過去スレ、関連スレ、関連リンクなどはこちら>>2-15

2 名前:v(^・^)v :03/03/13 21:54
■基本■
[Stroustrup]
禿 http://www.research.att.com/~bs/
C++に関するリンクの総本山でもあります。

[C++ Final Draft International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf

[JTC1/SC22/WG21 - C++]
http://std.dkuug.dk/jtc1/sc22/wg21/
規格書の重箱の隅的な話題などが読めます。

[C/C++ Users Journal]
http://www.cuj.com/
[Object Management Group]
http://www.omg.org/
[Association of C & C++ Users]
http://www.accu.org/

[news]
news:comp.lang.c++
news:comp.lang.c++.moderated

[ML]
cppll(日本語) http://www.trickpalace.net/cppll/
メインページにC++に関する良質なC++日本語リンク集があります。

3 名前:v(^・^)v :03/03/13 21:55
■Document■

C++FAQ Lite http://www.parashift.com/c++-faq-lite/
C++FAQ(日本語) http://www.bohyoh.com/CandCPP/FAQ/
Cとその仕様を比較しながらの解説なので分かりやすい。
*** 質問の前に必ずこの二つに目を通してください ***

[STL]
STL Programmer's Guide http://www.sgi.com/tech/stl/
日本語としてはおそらくここ。ただしリファレンス的内容。
http://www.wakhok.ac.jp/~sumi/stl/

[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~g940455/wp/
news news:gmare.comp.lib.boost.devel

4 名前:v(^・^)v :03/03/13 21:55
■Books■
amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/(翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/(翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/(翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/(翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/(翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/(翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/(翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/(翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/

5 名前:デフォルトの名無しさん :03/03/13 21:55
【過去スレ倉庫・その2】

21st: http://pc3.2ch.net/jisaku/kako/1027/10277/1027722910.html
22nd: http://pc3.2ch.net/jisaku/kako/1028/10289/1028907289.html
23rd: http://pc3.2ch.net/jisaku/kako/1031/10316/1031682768.html
24th: http://pc3.2ch.net/jisaku/kako/1033/10335/1033560431.html
25th: http://pc3.2ch.net/jisaku/kako/1034/10348/1034812874.html
26th: http://pc3.2ch.net/jisaku/kako/1035/10359/1035941663.html
27th: http://pc3.2ch.net/jisaku/kako/1037/10372/1037214869.html
28th: http://pc3.2ch.net/jisaku/kako/1038/10386/1038655723.html
29th: http://pc3.2ch.net/test/read.cgi/jisaku/1040485482/ (HTML化待ち)
30th: http://pc3.2ch.net/test/read.cgi/jisaku/1042546212/ (HTML化待ち)
31st: http://pc3.2ch.net/test/read.cgi/jisaku/1044299316/ (HTML化待ち)
32nd: http://pc3.2ch.net/test/read.cgi/jisaku/1045922625/ (前スレ)


6 名前:v(^・^)v :03/03/13 21:55
■Compiler■
[GCC]
http://gcc.gnu.org/
(Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
1.0 http://www.microsoft.com/japan/msdn/netframework/downloads/sdk.asp
1.1βhttp://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/MSDN-FILES/027/002/056/msdncompositedoc.xml
[MSVC] コンパイラ以外のツール、ドキュメントです。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
(一括ダウンロードの時は上のURLに続けてこちらを入力してください
default.htm?p=/msdownload/platformsdk/sdkupdate/psdk-full.htm)

なお上記三者を組み合わせたプログラミングにおいてはこちらが分かりやすいです。
http://www.geocities.com/Tokyo/Ginza/5432/documents/winprog/index.html

[DigitalMars]
http://www.digitalmars.com/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm

7 名前:v(^・^)v :03/03/13 21:56
■Libraries■
Boost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
LokiPort
MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
MSVC6.0 SP5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

ACE/TAO http://www.cs.wustl.edu/~schmidt/
Network、Thread、ORBなどのポータブルなライブラリ
Blitz++ http://www.oonumerics.org/blitz/
数値計算ライブラリとして人気がある、らしい
spirit http://spirit.sourceforge.net/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ

他ライブラリリンク集
http://www.trumphurst.com/cpplibs/cpplibs.phtml

8 名前:v(^・^)v :03/03/13 21:56
■過去スレ■
Part1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
Part9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
Part10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
Part11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
part12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
part13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
part14 http://pc2.2ch.net/test/read.cgi/tech/1041328679/l50
part15 http://pc2.2ch.net/test/read.cgi/tech/1043605481/l50
part16 http://pc2.2ch.net/test/read.cgi/tech/1045746245/

9 名前:デフォルトの名無しさん :03/03/13 21:58
Java!

10 名前:デフォルトの名無しさん :03/03/13 21:58
■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc2.2ch.net/test/read.cgi/tech/1037795348/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
STLスレッド
part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html

11 名前:デフォルトの名無しさん :03/03/13 21:59
■関連スレ(環境依存の話題)■
[GCC]
GCCについて http://pc2.2ch.net/test/read.cgi/tech/1007731543/l50
祝・GCC 3.0リリース http://pc.2ch.net/test/read.cgi/unix/992942337/l50
[Digital Mars]
Code of the Nerds" Digital Mars C/C++
http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[Borland]
C++Builder相談室
part1 http://piza2.2ch.net/tech/kako/969/969458279.html
part2 http://pc.2ch.net/tech/kako/997/997074601.html
part3 http://pc3.2ch.net/tech/kako/1016/10160/1016065855.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1035596146/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1045542179/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1030493157/l50
[VisualC++]
VisualC++相談室
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc2.2ch.net/test/read.cgi/tech/1036897197/l50

12 名前:デフォルトの名無しさん :03/03/13 21:59
ぉっ

13 名前:v(^・^)v :03/03/13 21:59
VisualC++(MFC限定)相談室 MFC6.dll
http://pc2.2ch.net/test/read.cgi/tech/1039607377/l50
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
COM の世界を斬る!
http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
ATL 相談室
http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
managed C++ やろうぜ!!
http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50

14 名前:v(^・^)v :03/03/13 22:00
終わりです

15 名前:デフォルトの名無しさん :03/03/13 22:16
乙彼

16 名前:デフォルトの名無しさん :03/03/13 22:19
STLつかうと一気に実行ファイルサイズが10倍に?!

17 名前:デフォルトの名無しさん :03/03/13 22:20
持つ彼〜

18 名前:デフォルトの名無しさん :03/03/13 22:21
>>16
処理系とオプション書いてみ。

19 名前:デフォルトの名無しさん :03/03/13 22:43
STLを使い出すと今までと同じ労力で10倍の規模のプログラムを作れてしまう、
という意味なんだろ?

20 名前:デフォルトの名無しさん :03/03/13 23:01
>>16
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

21 名前:デフォルトの名無しさん :03/03/13 23:07
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

22 名前:デフォルトの名無しさん :03/03/13 23:09
>>21
#include <stdafx.h>

後死ね。

23 名前:デフォルトの名無しさん :03/03/13 23:11
>>20
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

24 名前:デフォルトの名無しさん :03/03/13 23:12
>>22
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

25 名前:デフォルトの名無しさん :03/03/13 23:16
>>22
よくわからないんだけど・・・

26 名前:デフォルトの名無しさん :03/03/13 23:21
>>16 >>20 >>23
デジャヴですか?

27 名前:デフォルトの名無しさん :03/03/13 23:44
>>20
それ前スレの俺の書き込みのコピペ(w。
もうBorland-C++は5.6.4になってるよ(w

28 名前:デフォルトの名無しさん :03/03/13 23:45
デジャブ。ワロタ

29 名前:デフォルトの名無しさん :03/03/14 13:06
>>26
テンプレ

30 名前:デフォルトの名無しさん :03/03/14 16:26
>>29
そうか。
じゃあ、次のスレを立てる人にはもっときっちりやって貰わないといかんな。

31 名前:デフォルトの名無しさん :03/03/14 17:33
AA 用意してる間に前スレ 1000 取られちまった

          | | ガガガガガガガッ         人  
           | |               人  <  >__Λ∩
           | |            人  <  >__Λ∩Д´)/
  ( ・∀・)   | |       人  <  >__Λ∩Д´)/   / ←http://pc2.2ch.net/test/read.cgi/tech/1045746245/993
 と    )    | |    人  <  >__Λ∩Д´)/   / ←http://pc2.2ch.net/test/read.cgi/tech/1045746245/994
   Y /ノ    .人   <  >__Λ∩Д´)/   / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/995
    / ) .人 <  >__Λ ∩Д´)/   / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/996
  _/し' <  >_Λ∩Д´)/   / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/997
 (_フ彡 V`Д´)/   / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/998
            / ←>>http://pc2.2ch.net/test/read.cgi/tech/1045746245/999

32 名前:デフォルトの名無しさん :03/03/14 18:47
class foo {
int _id;
public:
foo(int id) : _id(id) { }
foo(foo& f) : _id(f._id) { }
foo& operator=(foo& f) { _id = f._id; return *this;}
virtual ~foo() {}
};
int main(int,char**){
foo bar(0);
bar = foo(1);
return 0;
}
以上のコードを gcc 3.2でコンパイルしたら
no match for `foo& = foo' operator
candidates are: foo& foo::operator=(foo&)
っていわれるんだけど、俺間違ってないよね?

33 名前:デフォルトの名無しさん :03/03/14 19:27
>>32
まちがってる

foo(const foo& f) : _id(f._id) { }
foo& operator=(const foo& f) { _id = f._id; return *this;}

コピーコンストラクタや代入演算子はconstの参照だ
一時オブジェクトは非const参照できない

34 名前:デフォルトの名無しさん :03/03/14 22:01
BCC とかなら gcc ほどそのへんの制限きつくないから通るだろうけどね。

>>33 より厳密に言うなら一時オブジェクトというより
右辺値の非 const 参照できないってこと。

35 名前:デフォルトの名無しさん :03/03/14 23:26
class Unko[
int x,y,z,a,b,c;
};
void *p:
p=new Unko();
delete p;

これはメモリリークしますか?

36 名前:デフォルトの名無しさん :03/03/14 23:32
>>35
メモリリーク以前に、コンパイルが通りません。

37 名前:デフォルトの名無しさん :03/03/15 01:13
void *p:をdeleteした場合って、デストラクタ呼ばれたっけ?

38 名前:デフォルトの名無しさん :03/03/15 01:15
呼ばれにゃい。

39 名前:デフォルトの名無しさん :03/03/15 02:28
んなもん15秒あれば試せるだろ・・・

40 名前:デフォルトの名無しさん :03/03/15 02:52
15秒でエディタ起動・ファイルの作成・コンパイル・起動までできるの?

41 名前:デフォルトの名無しさん :03/03/15 02:56
>>37
pがどんな型情報を持っているのかと小一時間。

42 名前:デフォルトの名無しさん :03/03/15 03:06
>>40
俺のPCにはVisual Studioと検証用の使い捨てプロジェクトが常に立ち上がっているわけだが。

43 名前:デフォルトの名無しさん :03/03/15 03:56
>>35
ウンコが処理されないようなコード書くなよ。

44 名前:デフォルトの名無しさん :03/03/15 04:21
>>35
実は渡されたモノはうんこだという事実を知る由も無く
処理を要求されるoperator deleteが不憫だ。

45 名前:デフォルトの名無しさん :03/03/15 11:12
こんにちわ。質問があります。
1つの関数で2つ以上のオブジェクトをnewして返したいんですが、
void func( ObjectA* a, ObjectB* b )
{
  a = new ObjectA;
  b = new ObjectB;
}
とやってもできないんです。引数じゃなくて、返値でやればできるんですが、
そうすると1つしかnewできません。
何がいけないのか教えてください。

46 名前:デフォルトの名無しさん :03/03/15 11:26
端的に言えばポインタ引数はあくまで値渡しだから。

47 名前:デフォルトの名無しさん :03/03/15 11:29
>>44 わろた

48 名前:デフォルトの名無しさん :03/03/15 11:32
>>45
void func( ObjectA* &a, ObjectB* &b )
{
  a = new ObjectA;
  b = new ObjectB;
}

49 名前:デフォルトの名無しさん :03/03/15 11:35
>>45
void func(ObjectA*& a, ObjectB*& b )
{
  a = new ObjectA;
  b = new ObjectB;
}

50 名前:デフォルトの名無しさん :03/03/15 11:35
ケコーン

51 名前:デフォルトの名無しさん :03/03/15 11:38
まぁ、std::pair<>とか構造体とか使えば何個でも返り値でいけるわけだが。

52 名前:デフォルトの名無しさん :03/03/15 13:03
>>51
美しくない実装だ。

53 名前:デフォルトの名無しさん :03/03/15 13:47
>>52
複雑なパラメータの受け渡しにはclassやstructを使うのが定石だろ。
pairは見たことない。

54 名前:デフォルトの名無しさん :03/03/15 14:16
tupleだな

55 名前:デフォルトの名無しさん :03/03/15 15:44
pair は class とは別のものであるらしい

56 名前:デフォルトの名無しさん :03/03/15 23:07
パラメータの受け渡しにパラメータブロック構造体を使うのは可か不可か。考えて見よう。

57 名前:デフォルトの名無しさん :03/03/15 23:48
可・不可ってあたりが学生臭いなあ
それぞれの長所、短所、どっちにしろ同じこと、ぐらいにしようよ

58 名前:デフォルトの名無しさん :03/03/16 00:17
学生ってのは誉め言葉でうか

59 名前:デフォルトの名無しさん :03/03/16 00:37
宿題なら自分でやれって意味だと思うし

60 名前:デフォルトの名無しさん :03/03/16 17:23
C++でテキストファイルを読み込む場合、ifstreamが使えますが、
Cのfreadでまとめて読み込む方がずっと速いと聞いたことがあります。
実際、単純に考えるとそうなりそうですが、ifstreamを使って、
ファイルの読み込みを高速化する方法はないのでしょうか。

前に2チャンネルのどこかのスレで見た気もするのですが、
今どこにあるかわからなくなってしまいました。
お願いします。

61 名前:デフォルトの名無しさん :03/03/16 17:26
>実際、単純に考えるとそうなりそうですが、

まずは実際にどのくらい遅くなるのか計ってから書きこもうな

62 名前:デフォルトの名無しさん :03/03/16 17:34
>>60
よくわからんが、ifstreamのバッファを大きくするとか?

63 名前:デフォルトの名無しさん :03/03/16 17:46
>>60
>Cのfreadでまとめて読み込む方がずっと速いと聞いたことがあります。

取り合えず本当に早くなるのか結果を見せて下さい。


64 名前:デフォルトの名無しさん :03/03/16 19:29
60じゃないが

ifstream - 1052[ms]
cstdio - 991[ms]

std::ifstream fs;
for(int i= 0; i< 1000; i++) {
fs.open("test.txt", std::ios::in);
fs.read(ch1, 290);
fs.close();
}

FILE* f;
for(int j= 0; j< 1000; j++) {
f = fopen("test.txt","r");
fread(ch2, sizeof(char), 290, f);
fclose(f);
}

65 名前:デフォルトの名無しさん :03/03/16 19:32
ioのコストが高いから
あまり変わらないのかもね

66 名前:デフォルトの名無しさん :03/03/16 20:09
おれはC++でも_open _read _write _closeしかつかわない
つーかそれが普通だとおもってたんだが違うのかな?

67 名前:デフォルトの名無しさん :03/03/16 20:15
おれはC++だとfstreamしか使わない
おれはそれが普通だと思ってた

68 名前:デフォルトの名無しさん :03/03/16 20:18
おれはC++ではCreateFileしか使わない
おれは普通だと想ってる

69 名前:デフォルトの名無しさん :03/03/16 20:22
ひとそれぞれだね!!


70 名前:名無しさん :03/03/16 21:38
おれはC++でもぬるぽを使っている
おれは普通だと思ってる

71 名前:デフォルトの名無しさん :03/03/16 21:46
 ユダンモスキモ・・・
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/  
 (_フ彡        /  ←>>70

72 名前:デフォルトの名無しさん :03/03/16 22:27
だまってこれ使え
class FilePtr
{
public:
explicit FilePtr(const char* text,const char *wr){ pfile = std::fopen(text,wr) ; if(!pfile) throw int( 0 ); }
~ FilePtr() { if(pfile) std::fclose(pfile); }
operator std::FILE* () { return pfile ; }
private:
std::FILE* pfile;
};
int main(){
try{
FilePtr fptr("test.txt","r");
}
catch(int){
std::puts( "Non File" );
}

return 0;
}


73 名前:デフォルトの名無しさん :03/03/16 22:36
>>72
だまってこういうコード書いてもいいですか。
int main() {
 FilePtr fptr("test.txt","r");
 FilePtr fptr2 = fptr;
}

74 名前:デフォルトの名無しさん :03/03/16 23:19
便乗質問ですけど、
>>64
Cのfreadだと何バイト読み込んだかわかるけど、
C++のreadだと、何バイト読んだかわからないですよね。
それとも、方法があるのでしょうか?


75 名前:デフォルトの名無しさん :03/03/16 23:20
gcountがあるJARO

76 名前:74 :03/03/16 23:28
>>75
う。ありがとうございます。
gcount...。getにしか使えないのかと思ってました。

77 名前:デフォルトの名無しさん :03/03/16 23:47
読んだ後にlengthした方がええよ

78 名前:デフォルトの名無しさん :03/03/16 23:48
>>73
そんなもんだめ
コピー、代入は自分で考えて下さい。
おれはprivateに放り込みますけどね

79 名前:デフォルトの名無しさん :03/03/17 00:04
if (FILE* fp = fopen(...)) {
}

上のように書いたらVC6.0でコンパイル通っちゃったのですが、
C++的にはこれはアリなのでしょうか?
今まで一度もこういう記述を見たことが無いので・・・


80 名前:デフォルトの名無しさん :03/03/17 00:06
>>79
ありあり大辞典

81 名前:デフォルトの名無しさん :03/03/17 00:07
>>79
あり。寿命は if のスコープ。

82 名前:デフォルトの名無しさん :03/03/17 00:07
>>78
privateに放り込むよりメンバをconstにするほうがいいぞ。

class FilePtr
{
public:
explicit FilePtr(const char* text,const char *wr) : pfile( std::fopen(text,wr) ) { if(!pfile) throw int( 0 ); }
~FilePtr() { std::fclose(pfile); }
operator std::FILE* () const { return pfile ; }
private:
std::FILE* const pfile;
};


83 名前:デフォルトの名無しさん :03/03/17 00:13
>>82
readとかwriteのメンバ関数はないの?

84 名前:デフォルトの名無しさん :03/03/17 00:14
>>82
え? コピーコンストラクタがとおるのでは?

85 名前:デフォルトの名無しさん :03/03/17 00:19
<<をオーバーロードしたいのですが、
組込型が引数な場合はどうすれば良いのでしょうか。
こんな風では当然あいまいだと言われてしまって…。

#include <fstream>

std::ostream &operator <<( std::ostream &s, int d )
{
 ++d;
 return s << d;
}

int main(){
 std::ofstream f;
 f.open("hage.txt");

 f << 777;

 f.close();
 return 0;
}


86 名前:82 :03/03/17 00:25
>>84
あーそうだねぇ。やっぱりめんどくせぇなー。

87 名前:デフォルトの名無しさん :03/03/17 00:30
>>84
class noncopyable
{
noncopyable(const noncopyable &);
void operator =(const noncopyable &);
protected:
nocopyable(){}
};
を用意し
class FilePtr : noncopyable
{ /*...*/ };
とすればいい

ちなみにboostに同名のクラスがある

88 名前:デフォルトの名無しさん :03/03/17 00:31
× >>84
>>86

89 名前:82 :03/03/17 00:42
>>87
class noncopyableの定義も、boost/noncopyable.hppのインクルードも
同じくらいにめんどくさいと思ったのデスヨ。
「その場で」「直接」な手段と思ったのですがねぇ。無念。

90 名前:デフォルトの名無しさん :03/03/17 01:28
>>85
無理
普通に関数でも作って


91 名前:デフォルトの名無しさん :03/03/17 01:36
>>90
ありがとうございます。
しょうがないのでostreamをオーバーライドすることにします。

92 名前:デフォルトの名無しさん :03/03/17 01:45
>>91
何を言っているのですか? 意味が…

93 名前:デフォルトの名無しさん :03/03/17 01:48
>>85
組み込み型をラップするクラスを作り、それについてオーバーロードすればよい

94 名前:デフォルトの名無しさん :03/03/17 01:50
>>85
なんで
std::ostream &operator <<( std::ostream &s, int d )
{
++d;
return s << d;
}
こんなことがしたいんだ?
s<< 777 + 1;
でいいじゃん


95 名前:デフォルトの名無しさん :03/03/17 02:08
>>91
あ、90さんのおかげで無理だと分かったので、
ostreamのオペレータ<<をオーバーライドしたようなの作るしかないかなと。

ここの一番下を参考にしているのですが、
継承元の<<呼び出しがどうも上手く行きません…。
ttp://www.microsoft.com/japan/developer/library/vclang/_iostream_ostream.htm

>>93
ありがとうございます。そういう手もあるんですね。
<<を全書き換えするのと、どっちが楽だろう…選択肢が増えて助かります。

>>94
例えなので…。

96 名前:デフォルトの名無しさん :03/03/17 02:14
operator<<をオーバーロードして何がしたいのか教えてください

97 名前:デフォルトの名無しさん :03/03/17 02:19
後でソース読み直したときに混乱しそうだ。

98 名前:デフォルトの名無しさん :03/03/17 02:26
>>96
いやはや、長引いちゃってすいません。

目的は2つありまして…。まず、いま既に<<を膨大に使って
txt出力しているソースがあるのですが、これを全て
別の注釈付きな書式で書き出す必要がありまして…。

1度出来れば良い&手書きで直していると、
ミスも出そうなので、一気に根本を乗っ取れたらなと。

もう1つはまだ、与しやすいのですが、
doubleやfloat型の「0.0」という数字を、<<にて小数点が付いたままtxt出力したいなと。
(普通にやると「0」になってしまうので)

99 名前:デフォルトの名無しさん :03/03/17 02:29
C++で文字列(const char*)の比較する場合、stringに代入しないなら
char_traits::lengthで両方の長さ調べて短いほうでchar_traits::compareして・・・
っするしかないの?

100 名前:デフォルトの名無しさん :03/03/17 02:41
>>98
class wrapstream
{
ostream *os;
public:
wrapstream(ostream &p):os(&p){}

template <class T>
wrapstream &operator<<(const T &a)
{ (*os)<<"--- "; (*os)<<a; (*os)<<endl; return *this; }
};

cout<<fixed;
wrapstream ws(cout);
ws<<10.0<<20.0;

これでどうでしょうか?
小数点がついたまま出力したりするのはios_baseで設定することができるのでそれを参照してください

101 名前:デフォルトの名無しさん :03/03/17 02:42
>>99
strcmp

102 名前:デフォルトの名無しさん :03/03/17 02:50
>>100
す、素晴らしいコンポジションであります_| ̄|○

もはや、手作業による長く地味な書き換えしか無いと思ってたのが、
出力先を置換するだけで、一瞬にして作業が終わってしまいました。

いやはや、いくら感謝してもし足りません。ありがとうございました。

103 名前:デフォルトの名無しさん :03/03/17 04:41
>>100
ウヒョ! いい男・・・

104 名前:デフォルトの名無しさん :03/03/17 09:43
うほっ!うまそーな魚!いただきマンモース!!!!!!!

105 名前:デフォルトの名無しさん :03/03/17 10:43
ごちそうサマンサ。

106 名前:デフォルトの名無しさん :03/03/17 11:25
>>77どういう意味?
tellg?

107 名前:デフォルトの名無しさん :03/03/17 11:46
char_traits::length()は内部でstrlen()を呼び出してるだけじゃん。

108 名前:デフォルトの名無しさん :03/03/17 18:49
のーのーのーチッチッチッ


109 名前:デフォルトの名無しさん :03/03/17 19:33
構造体をクラス宣言の中で宣言したときと、
外で宣言したときの違いを教えてください。

中で宣言すると、メンバ関数の戻り値に
宣言した構造体を用いることができないようなのですが、
それ以外に違いや制限はあるでしょうか?

// ↓中で構造体を宣言
class c {
 struct s {
  // 〜
 };
 // 〜
};

// ↓外で構造体を宣言
struct s {
 // 〜
};

class c {
 // 〜
};

110 名前:デフォルトの名無しさん :03/03/17 19:42
>>109
返せるよ。
class A {
struct B {
int i;
} b;
public:
B func() {
return b;
}
};

111 名前:デフォルトの名無しさん :03/03/17 19:47
BがprivateでAがfriendを持たないと怒られるかも

112 名前:109 :03/03/17 21:56
>>110
ありがとうございます。
インライン関数にするとエラーがなくなりました。
インライン限定なんですね。

クラス内部情報の管理に使う構造体なので
宣言を外部に見せたくなかったのですが、
インライン関数ばかりにするわけにもいかないので、
もう宣言を外に見せるようにするしかないですかね。

113 名前:デフォルトの名無しさん :03/03/17 22:11
>>112
悪いけど...

> インライン関数にするとエラーがなくなりました。

と言うことから...

> インライン限定なんですね。

と結果を出す奴は、プログラマには向いてないと思う。

class A {
 struct B {
  int i;
 } b;
public:
 B func();
};

A::B A::func()
{
 return b;
}

114 名前:デフォルトの名無しさん :03/03/17 22:42
>>112
ぶっちゃけ処理系は何よ?

115 名前:デフォルトの名無しさん :03/03/17 23:05
>>113
>と結果を出す奴は、プログラマには向いてないと思う。

>>114 もな。

116 名前:デフォルトの名無しさん :03/03/17 23:18
111 が答えだと思うんだが・・・。
構造体を見せたくないなら、構造体へのポインタをメンバにすればよかれ。

117 名前:デフォルトの名無しさん :03/03/17 23:54
class A {
struct B {
int i;
B(int j) : i(j) {}
} b;
public:
A(int i) : b(i) {}
B func() {
return b;
}
};

int main()
{
A a(123);

std::cout << a.func().i << std::endl;
}

118 名前:デフォルトの名無しさん :03/03/18 00:01
>>113
その方法でうまくいきました。
自クラスで宣言した構造体なので、スコープ演算子を
使わなければいけないとは思いつきませんでした。

>>114
VC++6.0を使ってます。

>>116
class A {
 struct B {
  friend class A;
  // 〜
 };
 // 〜
};

とやってみたのですがエラーでした。
>>111はこういう意味ではない?)

119 名前:デフォルトの名無しさん :03/03/18 00:22
>>118
BはAのスコープ内にあるから、言ってみれば A::B だからfriend class
宣言なんて不要だよ。

120 名前:デフォルトの名無しさん :03/03/18 04:03
(本当の)配列をnewで確保するのはどう書けばいいの?
int (*p)[10];
として、
p = new (int [10]);
なら、 new int[10]と解釈されるみたい。
無理矢理、new[]を使って、
p = new [1][10];
なら出来るけど・・・

121 名前:111 :03/03/18 04:08
スコープ演算子を使ってないとは思わなかった・・・

122 名前:デフォルトの名無しさん :03/03/18 04:11
>>120
(゚Д゚)ハァ?
new int[10] の何が不満なんだ?

123 名前:デフォルトの名無しさん :03/03/18 04:17
>>120
p = reinterpret_cast<int (*)[10]>(new int[10]);

124 名前:デフォルトの名無しさん :03/03/18 04:32
>>120
その悲しみはよく分かるが配列型を基本型と同じには扱えないのが
C/C++の悪しき特長だ

125 名前:124 :03/03/18 04:38
一応書いとくと以下のことね

typedef int array[10];
main(){
int *ip=new int;// OK!!
array *ap=new array;// Error!!
}


126 名前:120 :03/03/18 04:59
レス thanks.
規格読んでたんだけど、よく分からなかった・・・

>>122
いや、ただの疑問。
>>123
これだと、delete時にもキャストしなければならない罠。
>>124-125
なるほど、つーことは配列へのポインタは必ずnew[]を
使わなければならないってことか・・

127 名前:デフォルトの名無しさん :03/03/18 09:35
Write a program in which you hard code a table that contain the state names
state post office abbreviations, and the population's size(you should find these data on-line
,or in some reference book). the program should prompt the user to enter
a state name. let the program do a sequential search to find the corresponding state postalcode
and population size. the program should display these data.

128 名前:bloom :03/03/18 09:52
http://www.agemasukudasai.com/bloom/

129 名前:デフォルトの名無しさん :03/03/18 11:19
ファイルの削除の仕方を教えてください。

130 名前:デフォルトの名無しさん :03/03/18 11:24
気合

131 名前:デフォルトの名無しさん :03/03/18 11:24
del *.*

132 名前:デフォルトの名無しさん :03/03/18 11:58
std::remove()

133 名前:デフォルトの名無しさん :03/03/18 11:59
typedef struct tagVMRGUID
{
GUID *pGUID;
GUID GUID;
} VMRGUID;

g++でコンパイルするとGUID GUID でエラーになるんですが
何か間違っているんでしょうか?

134 名前:133 :03/03/18 12:01
あ。GUIDの定義はコレなんですが…

typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID, *REFGUID, *LPGUID;

135 名前:デフォルトの名無しさん :03/03/18 12:05
エラーメッセージを省くな馬鹿野郎

136 名前:デフォルトの名無しさん :03/03/18 12:08
>>133
GUID は構造体の名前なんだから
変数の名前として宣言しちゃだめ。。。

137 名前:133 :03/03/18 12:13
>>135 失礼しましたエラーはこう出てます。
strmif.h:27642: declaration of `GUID tagVMRGUID::GUID'
winnt.h:1167: changes meaning of `GUID' from `typedef struct _GUID GUID'

>>136
レスありがとうございます。
そうなんですか。これはMicrosoft製のヘッダなんですけど・・
回避できないものでしょうか…。

138 名前:デフォルトの名無しさん :03/03/18 12:23
>>136
ハァ?適当なこといってんじゃねーよ。
struct S
{
};
struct X
{
 struct S S;
};

>>133
ということで、struct GUID;として定義されてれば、
structを付ければ曖昧さが無くなるんだが、
typedefだとどうしていいのかわからん。
回避ってんなら、

typedef struct tagVMRGUID
{
GUID *pGUID;
struct _GUID GUID;// 適当なコメント
} VMRGUID;

これくらいか?

139 名前:133 :03/03/18 12:37
>>138
ありがとうございます。修正してみたのですが
同じエラーになってしまいました。

138 のコードをコンパイルしてみると同じエラーになるようです…。
名前を変更したら通ることは通るんですが…。

struct S {
 int a;
};
struct P {
 S S; // エラー
};
int main( void) {
P p;
p.S.a = 1;

140 名前:133=139 :03/03/18 12:42
>>138
大変失礼しました。
Struct S S で通りました。

struct _GUID GUID; が通らない…。

141 名前:デフォルトの名無しさん :03/03/18 14:49
>>133
うそ?????????????????????
typedef struct A{ const static int n = 5;}C ;
struct B
{
::C C;
struct A A;
};

142 名前:133=139 :03/03/18 17:45
>>141
何度もレスをいただき、誠にありがとうございます。
141さんのコードのようにグローバルスコープに合わせると
コンパイル通りましたー。
GUID GUID の部分ばかり修正していて *pGUID; の修正を
忘れていました。ここもエラーになっていたようで…。
うつけものです。すみません。。基本知識が不足しているので
規格書を読み直してみます。

今回は皆様にご助言をいただきとても助かりました。
ありがとうございます。

↓修正結果はこうなりました。
typedef struct tagVMRGUID {
::GUID *pGUID;
::GUID GUID;
} VMRGUID;

143 名前:デフォルトの名無しさん :03/03/18 17:52
http://www.kuzbass.ru/docs/isocpp/lib-support.html

144 名前:デフォルトの名無しさん :03/03/18 18:00
おい!てめーらくそか!?

俺の仕様書にわざとコーヒこぼしただろ!!

ココならいえる。

145 名前:デフォルトの名無しさん :03/03/18 18:25
>>144
板違いです。

146 名前:デフォルトの名無しさん :03/03/18 18:26
何か、ime.nu の広告がむちゃくちゃ増えてないか?

147 名前:デフォルトの名無しさん :03/03/18 18:56
ホンとだw

148 名前:デフォルトの名無しさん :03/03/19 17:49
CからC++へのスムーズな移行にはどんな本が必要。
Cがそれなりに分かっているなら「憂鬱な〜」がイイって聞いたのですが。
それともチャンと「Effective〜」のような教本読まないとイクナイ?

149 名前:デフォルトの名無しさん :03/03/19 19:24
>>148
Effective〜のような本はどっちにしろ読むべし

150 名前:デフォルトの名無しさん :03/03/19 20:04
>>149
ありがとうございます。
Effective読んだ後に憂鬱摘み食いしながら
MoreEffective読むことにしてみます。

151 名前:デフォルトの名無しさん :03/03/19 21:40
struct vector3_t
{
vector3_t(float x, float y, float z) : x(x), y(y), z(z) {}
vector3_t(const vector3_t &v) : x(v.x), y(v.y), z(v.z) {}
vector3_t() : x(0.0f), y(0.0f), z(0.0f) {}
.
.
.
union
{
struct
{
float x;
float y;
float z;
};
float v[3];
};
};

ベクトルを表す構造体&共用体なんですが、いまいちやってる事の意味が分かりません。
共用体によって扱いを楽にしてるのはなんとなく分かるんですが、上の3行って一体・・

152 名前:デフォルトの名無しさん :03/03/19 21:43
マルチですか 若いっていいですね

153 名前:デフォルトの名無しさん :03/03/19 21:44
>>152
スレ違いだから来ただけだろ。失せろボケ

154 名前:デフォルトの名無しさん :03/03/19 21:49
まあいいや、可哀想なのでマジレス。

union
{
struct
{
float x;
float y;
float z;
};
float v[3];
};

とりあえず、死ね。
処理系依存互換性皆無

155 名前:デフォルトの名無しさん :03/03/19 21:51
>>154
あの、151の通りであってるんですが。共用体が構造体に入ってるんです。
もう少し勉強してくらさい。

156 名前:デフォルトの名無しさん :03/03/19 21:52
>>154 アホ

157 名前:デフォルトの名無しさん :03/03/19 21:54
>>151
コンストラクタの初期設定子

ようは、構築時にメンバの初期設定してるだけ。

vector3_t v(1.0, 2.0, 3.0);
とされると、v.x = 1.0; v.y = 2.0; v.z = 3.0; となる。
vector3_t v1(v);
とされると、v1.x = 1.0; v1.y = 2.0; v1.z = 3.0; となる。
vector3_t v2();
とされると、v2.x = 0.0; v2.y = 0.0; v2.z = 0.0; となる。

俺も、極めてわかりにくい構文だと思う。

後、無名共用体、無名構造体は >>154 の言う通り処理系に依存する。

158 名前:デフォルトの名無しさん :03/03/19 21:55
>>151-155
おまえら見当違いもいいとこだな

159 名前:デフォルトの名無しさん :03/03/19 21:55
初期化子の事を聞きたいのかね

160 名前:デフォルトの名無しさん :03/03/19 21:57
>>157
CEOのAndre LaMothe氏がOpenGLのパーティクルシステム用に書いたコードの一部なんですが、
この人のコードはとってもワイルドな感じです。

161 名前:デフォルトの名無しさん :03/03/19 21:58
んで、こういう書き方をするメリットって?

162 名前:デフォルトの名無しさん :03/03/19 21:58
構造体と配列のメモリレイアウトの互換性も規定されてない

163 名前:デフォルトの名無しさん :03/03/19 22:05
メリットというか定数メンバやリファレンスメンバの初期化では
必然的にその構文に頼らざるを得ないな。

164 名前:デフォルトの名無しさん :03/03/19 22:57
エラーコードを取得するメソッドがついてる
クラスがあるとして、やっぱりメンバメソッドの頭で
エラーコードのメンバ変数を初期化する
処理を入れてあげるのって普通?
もっと格好いいやり方ですかね?
ようするに、エラーコードを持ったクラスの設計で
もっといいやり方ないでつかね?

165 名前:デフォルトの名無しさん :03/03/19 23:05
エラークラスを投げる

166 名前:デフォルトの名無しさん :03/03/19 23:12
あんまし、簡単に済まさないでさ、
もうちょっと知恵をわけてくれたっていいじゃんよ。
例外じゃないよな?って思うときだってあるじゃん。
エラーと例外って意味違うジャン。

167 名前:デフォルトの名無しさん :03/03/19 23:21
>>166
ここに質問したら、おまいが抱えてる問題を手取り足取り
解決してくれると思ってますか?
しかも質問内容に見合う回答内容もらってると思うが。

掲示板てのは基本的に情報収集&交換の場、
ヒントを得られれば上等と思ってくれたまい。
それが質問スレであっても、だ。
ヒントがあって考える、それすら出来ないヤツは(略

168 名前:デフォルトの名無しさん :03/03/19 23:24
>>166
情報少なすぎ。あの情報量では、>>165 が妥当。

169 名前:デフォルトの名無しさん :03/03/19 23:28
あ〜そうかよ。どうせわかんねーんだろ(プ
お前らの知識を試してみたんだが、この程度だったか。

170 名前:デフォルトの名無しさん :03/03/19 23:33
文盲あるいはチョソは発言禁止

171 名前:デフォルトの名無しさん :03/03/19 23:33
>>169
そう、お前に対してはこの程度が妥当。

172 名前:デフォルトの名無しさん :03/03/19 23:34
てゆーかさ、それを考えるのがクラス設計だと思うわけで、
そのクラスの性質とかいろいろな状況考えないと一概に言えないと思うのよ。
んで、一般論を言えば165じゃねーのってことじゃん?春厨君。

173 名前:デフォルトの名無しさん :03/03/19 23:38
エラークラスを投げるのが嫌ならグローバル変数にでもセットしてろすっとこどっこい

174 名前:デフォルトの名無しさん :03/03/19 23:41
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□

175 名前:デフォルトの名無しさん :03/03/19 23:42
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□ 

176 名前:デフォルトの名無しさん :03/03/19 23:42
そか?ゴメンゴメン。

例えばこんな感じ。
class Hoge
{
private :
int m_ErrCode;
public :
Hoge() : m_ErrCode(0){}

bool Method1( void )
{
m_ErrCode = 0; //←全てのメソッドの頭でこれを入れるのが
             //なんか格好悪いような気がするんです
 ・
   ・
   ・
}
  ・
  ・
  ・
int GetErrorCode( void )
{
return m_ErrCode;
}
};

もっといいやり方とかパターンとか、ないかなと。

177 名前:デフォルトの名無しさん :03/03/19 23:42
すっとこどっこいもここまでくるとすっとこどっこいが
可愛そうになるほどすっとこどっこいだな。

178 名前:デフォルトの名無しさん :03/03/19 23:46
>>176
もういいから失せなよ。

179 名前:デフォルトの名無しさん :03/03/19 23:46
>>176
どうせ、各々のメソッドが成功かどうかを返すんだろ ?
だったら、失敗した時だけエラーコードをセットすれば良いと思う。
(当然、メソッド成功時は GetErrorCode() の値は保証しないことをドキュメントに書いとく。)

180 名前:176and166 :03/03/19 23:46
169は私じゃないでつ。

181 名前:デフォルトの名無しさん :03/03/19 23:47
>>178
それだったら、その場で例外投げるとかエラーコード返すなりすればいいじゃん。
何もエラーコードを保存する必要はないような気がするが。

182 名前:181 :03/03/19 23:47
ごめんごめん >>176

183 名前:デフォルトの名無しさん :03/03/19 23:47
俺は別に格好悪いとは思わないけど。何がいけないんだろう。

184 名前:デフォルトの名無しさん :03/03/19 23:48
int GetErrorCode(void){return m_ErrCode=NO_ERROR;}

185 名前:デフォルトの名無しさん :03/03/19 23:49
エラーコードが揮発性でいいなら、
GetErrorCode内で初期化してしまう

186 名前:デフォルトの名無しさん :03/03/19 23:51
>>185
そんな汚いプログラムは書くなよ。

187 名前:176 :03/03/19 23:56
初期化とかはべつに問題じゃなくてね。
もうちょっと足してみると

bool Method1( void )
{
m_ErrCode = 0; //←全てのメソッドの頭でこれを入れるのが
             //なんか格好悪いような気がするんです
 ・
 ・
if( なんか失敗 ){
m_ErrCode = 失敗コード;
return false;
}



188 名前:デフォルトの名無しさん :03/03/20 00:00
iostreamの設計を見なされ

189 名前:デフォルトの名無しさん :03/03/20 00:01
エラーコードを返したら駄目なのですか?

190 名前:デフォルトの名無しさん :03/03/20 00:01
格好悪いなら取れば?
WindowsみたいにGetLastErrorとでもしておけば辻褄があうだろ

191 名前:デフォルトの名無しさん :03/03/20 00:04
bool Method1( void )
{
if( なんか失敗 ){
m_ErrCode = 失敗コード;
return false;
}

よし、これでどうだ

192 名前:176 :03/03/20 00:04
>>179
なるほど。そういう手もありかな?

>>181

戻り値をboolと書いてしまったのが
まずかったですね。
boolじゃなくてたとえばstringが戻り値だったとして
失敗して空のstringが返ったとき、なぜ空だったのか
GetErrorCode()で取得みたいな場合も。

193 名前:176 :03/03/20 00:15
>>188
あ、そっか。あったですね。
std::fstream strm( "Data.txt", std::ios::out | std::ios::in| std::ios::trunc );
if( strm.fail() == true )
fail()ってどうなってんだろ?後で見とこっと。
あれstd::ios::trunc ってどんな意味?


194 名前:デフォルトの名無しさん :03/03/20 00:16
>GetErrorCode()で取得
こういうのはマルチスレッドに弱かったりするからなぁ

戻り値はエラーコード専用として使い
引数でstringもらったら?


195 名前:デフォルトの名無しさん :03/03/20 00:18
if(strm.fail() == true)
この根底の仕方は駄目でしょ

196 名前:176 :03/03/20 00:23
if( strm.fail() )

あ。こか。

197 名前:176 :03/03/20 00:26
エラーコードを重要視したいがために引数返しに
するのって、悲しいコードな気もするんですね。

198 名前:デフォルトの名無しさん :03/03/20 00:27
だったら例外で良いじゃん

199 名前:デフォルトの名無しさん :03/03/20 00:28
>>197
COMは規約としてそうなっている
重要なのは一貫性だと思う

200 名前:Addicted to C++ ◆CPP8mJMMbA :03/03/20 00:31
class Hoge
{
private :
 int m_ErrCode;
public :
 Hoge() : m_ErrCode(0){}
 bool Method1( void ){
  //処理
  if( なんか失敗 ){
   m_ErrCode = 失敗コード;
   return false;
  }
  //処理
  return !(m_ErrCode = 0);
 }
//…
 int GetErrorCode( void )
 {
  return m_ErrCode;
 }
};

201 名前:176 :03/03/20 00:37
>>199
COMなってるね。
見えた。一貫性だね。
一貫して全てのメソッドの頭に書いとけば
それはそれでいいね。
別のクラスでは例外投げ使ってたりとか
したらこのクラスは、やっぱよくないしね。
これも例外投げで統一するべきだしね。
catchでエラー取得って、使う側にしたら
スンゴイ使いズらい気がするんだよね…

202 名前:デフォルトの名無しさん :03/03/20 00:41
if(!FAILED(p->foo()))
{
if(!FAILED(p->foo()))
{
if(!FAILED(p->foo()))
{
}}}
こんなのよりマシだと思う、例外は
実際COMのエラーはVBとかJとかでは例外として送出されてた

203 名前:176 :03/03/20 00:43
>>200
Method1の前にMethod2が失敗してたとしたら
Method1は常に失敗してしまうじゃん?
だからメソッドの頭にm_ErrCode=0が
必要だと思っちゃうわけですよ。
その頭に書いちゃうことは格好がいいか?ってこと。
話がもどっちまった。

204 名前:Addicted to C++ ◆CPP8mJMMbA :03/03/20 00:58
>>176(196)
ハァ? マルチスレッド? んなInternational Standardに
ないもんは知らねーYO! ちなみに
if(strm.fail())
は、格好にこだわるならむしろ
if(!strm)
の方が格好がいいかと。
std::ios_base::out | std::ios_base::truncは
ファイルを切り詰めるんじゃなかったかな。

205 名前:デフォルトの名無しさん :03/03/20 00:58
>>200のは m_ErrCode に 0 を代入してそれを否定してるんだから
true が返るときは必ず m_ErrCode == 0 が保証されるんじゃない?
トリッキーだけど。俺は return m_ErrCode=0, true; と書きたい。

206 名前:205 :03/03/20 01:00
すまそ、マルチスレッドの話であったか。

207 名前:Addicted to C++ ◆CPP8mJMMbA :03/03/20 01:05
>>203
すまぬ、マルチスレッドなどと訳のわからぬことを書いた。
てっきりMethodをマルチスレッドで同時実行するのかと。
逝ってきます y=-( ゚д゚)・∵ ターン
とまではいかないまでも(w、

>Method1の前にMethod2が失敗してたとしたら
>Method1は常に失敗してしまうじゃん?
これはなぜに?そういうクラス仕様?そうでなければ
このコードは自動的に最新のエラーコードに更新されると
思うのだが。

208 名前:デフォルトの名無しさん :03/03/20 01:06
>>206
別にマルチスレッドの話ではないと思う

>>203
同じクラスのメソッドが失敗したということは
その状態のまま他のメソッドを呼んではだめでしょ


209 名前:206 :03/03/20 01:11
あれそうなの?分からなくなってきた。そうでなければ>>200
コードはどこが問題になるのだろう。

210 名前:176 :03/03/20 01:16
悪い。私が見間違えた。
200のコードは満たしてます。
問題ないでつ。

211 名前:デフォルトの名無しさん :03/03/20 01:46
なぁ・・・俺・・・いまだに参照とポインタの使い分けに悩むんだ・・・
もう・・・ポインタ一本で行っていいかな・・・?

212 名前:デフォルトの名無しさん :03/03/20 01:49

  い
   と
    も

213 名前:デフォルトの名無しさん :03/03/20 05:06
下に書いたクラスみたいなのをいくつも作るときに、
楽ができるやり方ありませんか?
class Test
{
 Test ()
 {
  if (m_instance) throw Error ();
  m_instance = this;
 }
 ~Test () { m_instance = 0; }
 static Test* m_instance;
};

214 名前:デフォルトの名無しさん :03/03/20 05:15
Ctl+C Ctl+V

215 名前:デフォルトの名無しさん :03/03/20 05:33
>>214
うちの環境ではそんなコマンドないけど・・・
C-h k C-c C-v
C-c C-v is undefined

216 名前:213 :03/03/20 05:54
うちの環境では
C-M-a C-p C-@ C-M-e M-w で C-y

って、マジレスキボン……
templateっぽいけど、さっぱりわからんかった

217 名前:デフォルトの名無しさん :03/03/20 06:02
>>216
あのさ、何がしたいんだかわかんないよ。
class Test の微妙にそれぞれ違うバージョンを作りたいって事なんだろうけど、
どう微妙に違うのかわかんないと案の出しようが無いだろう。

218 名前:デフォルトの名無しさん :03/03/20 06:10
http://www.boost.org/libs/pool/doc/implementation/singleton.html
これか?

219 名前:デフォルトの名無しさん :03/03/20 06:19
仮想キーコードとスキャンコードの違いを教えてください。

…これってAPIスレの方が適切だったりしますか?

220 名前:219 :03/03/20 06:51
ごめんなさい、スレ立てるまでもないと勘違いして誤爆しました


221 名前:213 :03/03/20 06:53
>>217-218
>>213のTestみたいに、好きな時に作れるけど同時に一つしか存在できない
クラスを、いくつか作りたいんです。なのでboostのはちょっと。

今は、すべてのクラスでTestみたいなのを個別に書いてるんですが、
もうちょいなんとかならんのかなと思いました。
Testには書けてませんが、デフォルトコンストラクタ以外のも使いたいです。

>>219
そうみたい。

222 名前:デフォルトの名無しさん :03/03/20 07:44
template <class SubClass> class singleton
{
static SubClass *inst_;
public:
singleton()
{
if (inst_) throw Error();
inst_=static_cast<SubClass *>(this);
}
~singleton()
{ inst_=0; }
static SubClass &instance()
{ return *inst_; }
};
template <class SubClass>
SubClass *singleton<SubClass>::inst_=0;

//使い方
class Test : public singleton<Test>{};

223 名前:213 :03/03/20 08:12
>>222
動きました。ありがとうございます。

224 名前:デフォルトの名無しさん :03/03/20 16:54
ソケットのクラスで何がよく使われてますか?
それとも自作が基本ですか?

225 名前:デフォルトの名無しさん :03/03/20 18:19
>>224
よくわからんが、ACE とかはどうだろう?

226 名前:デフォルトの名無しさん :03/03/20 21:22
>>224
.NET風の薄いラッパを自作して使ってる。

227 名前:デフォルトの名無しさん :03/03/20 22:09
linuxのデバイスドライバを作るのにC++を使いたいのですがどうにもうまくいきません
どこか良い開設サイトをご存知ありませんか?



228 名前:デフォルトの名無しさん :03/03/20 22:20
std::copyやstd::swapを、自分で定義した型でオーバーロード
する時、オーバーロード関数はstdに入れちゃう?Koenig lookup
させる?そもそもオーバーロードなんてしない?

229 名前:デフォルトの名無しさん :03/03/20 22:23
>>194
>> GetErrorCode()で取得
> こういうのはマルチスレッドに弱かったりするからなぁ

煽り ? 単なる無知 ?
エラーコードがスレッド毎に保存されることぐらい常識だと思うが...。

230 名前:デフォルトの名無しさん :03/03/20 22:23
>>228
std に入れるのは規格違反。

231 名前:デフォルトの名無しさん :03/03/20 22:32
>>229
煽り? 周囲の文を読んでいるか?
クラスのメンバ変数だぞ?スレッド毎に保護されるわけ無いだろ…。


232 名前:228 :03/03/20 22:53
>>230
でも、Koenigでやるのも地獄だし、誰かがstd::を付けたら
結局ダメだし。

233 名前:名無しさん :03/03/20 23:02
ぬるぬるだな。

234 名前:デフォルトの名無しさん :03/03/20 23:05
だな

235 名前:デフォルトの名無しさん :03/03/20 23:08
企画違反でも入れちゃうのだっ

236 名前:デフォルトの名無しさん :03/03/20 23:10
 イヤ〜ン
             ノ∩
           ⊂   ヽ ←>>233
            /( 。Д。 )っ
            U ∨ ∨
         ・@;∴‥
   ∧_∧ ∩  :: :.
  ( ・∀・)/  :: ::
  (つ   /  :: :'
  人⌒l ノ  :: :: ガッ
  し(_)

237 名前:デフォルトの名無しさん :03/03/20 23:10
http://sourceforge.net/projects/opencxx/
これ、良いんじゃね?

238 名前:名無しさん@Emacs :03/03/20 23:28
>>237
それ何?説明読んだけどイマイチ分からんかった。
C++の文法を拡張した物のC++へのトランスレーターって事?

239 名前:デフォルトの名無しさん :03/03/20 23:29
ある関数 f があるとき、この関数を使って出来ることは

・fを呼び出す
・fのアドレスを取る

の2つだけである、ってのは正しいかな?

240 名前:228 :03/03/20 23:29
stdに入れるのがイレギュラーなのは確かだけど、だからといって
namespace myns {
  class Class1 { ... };
  swap(Class1 &x, Class1 &y) throw();
  ...

  namespace junk {
    using std::swap;
  }
  template <class Iter> void foo(Iter s, Iter e) {
    using namespace junk;
    Iter i1, i2;
    ...
    swap(*i1, *i2);
  }
}
なんて絶対やりたくないんだけど。
やっぱりオーバーロードしようとするのが間違い?

241 名前:230 :03/03/20 23:36
>>240
俺は常に.cppの頭でusing namespace std;する人なので
それは考えたことがなかった。。。けど、そんな複雑にせんでも

template <class Iter> void foo(Iter s, Iter e) {
 using std::swap;
 Iter i1, i2;
 ...
 swap(*i1, *i2);
}

だと何か問題あるのか?

242 名前:デフォルトの名無しさん :03/03/20 23:37
>>231
すまん書き間違えた...

×: エラーコードがスレッド毎に保存されることぐらい常識だと思うが...。
○: (マルチスレッドを考慮に入れるなら) エラーコードをスレッド毎に保存することぐらい常識だと思うが...。

まさかやり方知らないとか ?

243 名前:デフォルトの名無しさん :03/03/20 23:41
>>238
リフレクションが使えるC++

244 名前:デフォルトの名無しさん :03/03/20 23:42
> エラーコードをスレッド毎に保存することぐらい

gccだとどうやるの?

245 名前:デフォルトの名無しさん :03/03/20 23:42
threadハンドルをキーにmapする。

246 名前:228 :03/03/20 23:44
>>241
それだとmyns::swap()が見えない。
ちなみに単にswap()だけ、あるいはusing namespace stdだと、
*i1,*i2がprimitive型の時にstd::swap()が見えなくなる。

247 名前:デフォルトの名無しさん :03/03/20 23:53
>>242 >>245
だからメンバ変数だっていってんだろ!!
オブジェクト一つずつにそんなことする気か?

>threadハンドルをキーにmapする。
これじゃ足りねーよ

248 名前:デフォルトの名無しさん :03/03/20 23:55
>>244
スレッドは C++ の標準じゃねーから、単に gcc と書かれても困る。

249 名前:デフォルトの名無しさん :03/03/20 23:58
てかスレッドごとにインスタンス作れよ

250 名前:デフォルトの名無しさん :03/03/21 00:05
あるクラスのstaticなメンバ関数で共通に使いたいmutexを初期化したいのです。
Javaだったらスタティックイニシャライザでクラスに属するリソースの初期化処理をやりますよね。
でも、C++では言語としてそのような機能はないみたい(あるのかも知れないが、私は知らない)。
そこで、以下のようにグローバル変数で初期化しているのですけど、

namespace _hoge {
pthread_mutex_t mutex;
class Initializer {
public:
Initializer(){
pthread_mutex_init(&mutex, NULL);
}
};
Initializer initializer;
};

なんかダサい気がします。もっとよい方法を識者の方に伺いたいです。
(ちなみに、mutexをクラスのメンバにしてPTHREAD_MUTEX_INITIALIZERで初期化すると
「インテグラルじゃない値を初期化しようとしてる」みたいな警告が出るのでもっとダサい)



■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.