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


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

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

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

2 名前:デフォルトの名無しさん :03/07/07 21:15
2get...?

3 名前:v(^・^)v :03/07/07 21:16
■基本■
[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++日本語リンク集があります。

4 名前:v(^・^)v :03/07/07 21:16
■Document■

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

[STL]
http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
Standard Template Library プログラミング on the Web
リファレンス的内容。http://www.wakhok.ac.jp/~sumi/stl/
STL Programmer's Guide http://www.sgi.com/tech/stl/
[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
news news:gmare.comp.lib.boost.devel

5 名前:v(^・^)v :03/07/07 21:16
■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/

6 名前:v(^・^)v :03/07/07 21:16
■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/library/default.asp?url=/downloads/list/netdevframework.asp
[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/
[OpenWatcom]
http://www.openwatcom.org/
[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/07/07 21:17
■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/
数値計算ライブラリとして人気がある、らしい
antlr http://www.antlr.org/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ

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

8 名前:v(^・^)v :03/07/07 21:21
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/tech/kako/1041/10413/1041328679.html
part15 http://pc2.2ch.net/tech/kako/1043/10436/1043605481.html
part16 http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html
part17 http://pc2.2ch.net/tech/kako/1047/10475/1047560042.html
part18 http://pc2.2ch.net/tech/kako/1050/10501/1050177746.html
part19 http://pc2.2ch.net/test/read.cgi/tech/1052625846/
part20 http://pc2.2ch.net/test/read.cgi/tech/1055162298/

9 名前:v(^・^)v :03/07/07 21:30
■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
part1 http://pc2.2ch.net/tech/kako/1037/10377/1037795348.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50

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

10 名前:v(^・^)v :03/07/07 21:31
■関連スレ(環境依存の話題)■
[GCC]
GCCについて
part1 http://pc2.2ch.net/tech/kako/1007/10077/1007731543.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1046179115/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/tech/kako/1035/10355/1035596146.html
part5 http://pc2.2ch.net/tech/kako/1045/10455/1045542179.html
part6 http://pc2.2ch.net/test/read.cgi/tech/1054280736/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/tech/kako/1030/10304/1030493157.html
[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/tech/kako/1036/10368/1036897197.html

11 名前:v(^・^)v :03/07/07 21:31
初心者にVisual C++を教えるスレ
part1 http://pc3.2ch.net/tech/kako/1023/10235/1023530449.html
part2 http://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
part3 http://pc2.2ch.net/tech/kako/1038/10381/1038160750.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1044196393/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1048698321/l50


VisualC++(MFC限定)相談室 MFC7.dll
http://pc2.2ch.net/test/read.cgi/tech/1047949606/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

12 名前:デフォルトの名無しさん :03/07/07 21:46
オツカレーション

13 名前:デフォルトの名無しさん :03/07/07 21:56
>>1
乙。

14 名前:デフォルトの名無しさん :03/07/08 00:11
インスタンス化された関数テンプレートのポインタを取得したいのですが、以下の書き方ではエラーになります。
template<typename T> void func() { hoge };
void (*ptr)();
ptr = func<A>; // error: void(void) から void (__cdecl*)(void) に変換できません。
ptr = &func<A>; // 同上

どのように書けばよいでしょう?
VC++6.0 SP5 です。

15 名前:デフォルトの名無しさん :03/07/08 00:15
>>14
func<A>とかfunc<B>とかは全部オーバーロードされた関数として
扱われるので、明示的にキャストなどが要るはず。
 ptr = (void(*)()) &func<A>;

16 名前:デフォルトの名無しさん :03/07/08 00:33
>>15 ありがとうございます。
しかし、駄目でした。
error: '' から 'void (__cdecl *)(void)' に変換することはできません。

空欄の型とはいったい。コンパイラのせいなのかな。
駄目そうだったらおとなしく仮想関数を使います。

17 名前:デフォルトの名無しさん :03/07/08 00:44
>>16
これは
typedef void pf();
pf p= fn<int>;
p();

18 名前:oisn :03/07/08 00:44
>>1
また前スレの1さんでつか?
乙でし!
またよろしくおながいいたしますm(__)m

19 名前:デフォルトの名無しさん :03/07/08 00:44
>>18
ふざけんな!

20 名前:デフォルトの名無しさん :03/07/08 00:45
pf *p = fn<int>の間違い

21 名前:18 :03/07/08 00:48
>>19
どこがふざけとるん?

22 名前:デフォルトの名無しさん :03/07/08 00:50
VC7で
void (*pf)();
pf=func<int>;
これはコンパイルできないけど

void (*pf)()=func<int>;
これはコンパイルできる。なんで?

23 名前:デフォルトの名無しさん :03/07/08 00:57
>>21
> また前スレの1さんでつか?

24 名前:デフォルトの名無しさん :03/07/08 00:59
>>17
駄目でした。
最初のエラーと同じ 'void(void)' から 'void(__cdecl *)(void)' に変換できません。

特殊化を定義しておくと通ったりしてちょっと謎。
template<> func<A>() { hage }
ptr = func<A>; // OK
コンパイラのせいかな?

25 名前:21 :03/07/08 01:00
>>23
勝手な思い込みでした。気分害してスマソ。
新スレありがとう。。。

26 名前:デフォルトの名無しさん :03/07/08 01:01
>>25
ネタだけどな。
つーかなんでそう思ったん?
名前欄か?

27 名前:デフォルトの名無しさん :03/07/08 01:03
>>24
確実にコンパイルできる方法

template <class T> struct foo{ static void bar(){/*hoge*/} };

void (*pf)();
pf=foo<int>::bar;

28 名前:26 :03/07/08 01:05
>>25
v(^・^)vさんをコテハンだと思いますたTT
いつもこのスレには本当にお世話になり、頼りに
しています。(自分は会社勤務ではないため
聞く人がいないのです。といってMLは恥ずかしくて聞けないTT)
これからもよろしくです。。。


29 名前:デフォルトの名無しさん :03/07/08 01:07
v(^・^)v←決まり事だと思ってた

30 名前:名無し@沢山 :03/07/08 01:08
ヌヒよ、おれを頼りにしろ。

31 名前:デフォルトの名無しさん :03/07/08 01:08
VBの質問スレはv(^・^)bなのになんでここはc(^・^)c
とかc(+・+)cじゃないの?

32 名前:デフォルトの名無しさん :03/07/08 01:10
>>27
無事通りました。この方法でいってみたいと思います。
ありがとうございました。

33 名前:c(^p^)p :03/07/08 01:37


34 名前:デフォルトの名無しさん :03/07/08 01:48
c(pp^)

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

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

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

38 名前:デフォルトの名無しさん :03/07/08 11:43
あれ、このやりとりどっかで見たような気が……deja vu?

39 名前:デフォルトの名無しさん :03/07/08 12:05
>>38
恒例のやりとりですね。

40 名前:デフォルトの名無しさん :03/07/08 12:30
ヌヒよ、STLぐらいでガタガタいってたら
boostはどうすんだよ。

41 名前:デフォルトの名無しさん :03/07/08 12:44
>>40
ドタドタする

42 名前:デフォルトの名無しさん :03/07/08 15:49
VC7.1にしたらwarning C4244が大量に出てきて鬱だよママン…

43 名前:デフォルトの名無しさん :03/07/08 17:24
>>39
ああ。なんか前にもあったな。

44 名前:デフォルトの名無しさん :03/07/08 17:26
>>42
すげえ。VC7.1にしといてwarning C4244が大量に出てきたとかいってるよ。この人。

45 名前:デフォルトの名無しさん :03/07/08 18:49
>>44
そんな事言われても出たもんは出たんだよヽ(`Д´)ノ ウワァァァン
まぁあんまりその辺気にせずにVC6を使ってた漏れが悪いが…

46 名前:デフォルトの名無しさん :03/07/08 19:03
http://me.bird.to/hakoniwa/files/hakowai020.lzh

一応C++

47 名前:名無し@沢林 :03/07/08 23:00
しまった。デジャブーにのりおくれた・・・

48 名前:名無し@沢森 :03/07/08 23:07
沢○が大量発生だな。おい。

49 名前:デフォルトの名無しさん :03/07/09 00:21
僕の名前はエンポリオです。

50 名前:デフォルトの名無しさん :03/07/09 08:12
次作「ラン・タイム・エラー」でお会いしましょう。(飛呂彦)

51 名前:デフォルトの名無しさん :03/07/09 11:25
          Z
_____(-∀- )__
_│_│_│_│_│
│_│_│_│_│_          ポイント♪
_│_│_│_│_│
│_│_│_│_│_     (・∀・ )⌒ヽ⌒ヽ⌒ヽ


           
          
_____Σ(-∀・ )_
_│_│_│_│_│
│_│_│_│_│_        ポイントカード オモチデスカ?
_│_│_│_│_│
│_│_│_│_│_    (・∀・ )⌒ヽ⌒ヽ⌒ヽ



_____Σ(;・Д・)_
_│_│_│_│_│
│_│_│_│_│_        
_│_│_│_│_│        ・・・ポイント10バイ!
│_│_│_│_│_    □⊂(・∀・ )


52 名前:デフォルトの名無しさん :03/07/09 11:57
糞スレ化の危機により緊急age
質問カモ〜ン

53 名前:デフォルトの名無しさん :03/07/09 12:00
質問:C++って死滅しちゃうの?

54 名前:デフォルトの名無しさん :03/07/09 15:28
じゃあ俺が問題を出してやる

0<x<2などの複数回比較を可能にするクラスmulticomparisonと
そのヘルパ関数mcompを作成しろ。これによって次の例が可能になる
0<mcomp(x)<3、mcomp(x)==y==z

55 名前:デフォルトの名無しさん :03/07/09 15:39
>>54
http://pc2.2ch.net/test/read.cgi/tech/1047970129/814-825

56 名前:デフォルトの名無しさん :03/07/09 19:53
>>54
http://www.trickpalace.net/cxx/dagger/tips.h

57 名前:デフォルトの名無しさん :03/07/09 21:40
あったよ♪

http://akipon.free-city.net/page003.html

http://endou.kir.jp/betu/linkvp/linkvp.html

58 名前:デフォルトの名無しさん :03/07/09 23:27
いつからかわからんけど、ム板つまんなくなったよね。

59 名前:デフォルトの名無しさん :03/07/09 23:31
>>58
スレタイを10000回復唱汁。

60 名前:デフォルトの名無しさん :03/07/10 02:07
ちと教えてたもー。
基本クラスAとその派生クラスBがあったとします。
A* p = new B;
delete p;
という風に書きたい場合はAのデストラクタを仮想関数にするのでいいのでしょうか?

61 名前:デフォルトの名無しさん :03/07/10 02:14
>>60
Yes

62 名前:デフォルトの名無しさん :03/07/10 02:15
>>60
その通り。

というか、特殊な事情がない限り
デストラクタは仮想関数にしておいた方が無難。

特殊な事情ってのは、
派生クラスを作る予定が全くない、
よほどパフォーマンスやデータサイズが気になる、
とか。

63 名前:60 :03/07/10 02:33
>>61-62
ありがd。

勉強になりました。
派生する価値のあるクラスが書けるかどうかはおいておくとしてとりあえず癖につけておきます。

64 名前:デフォルトの名無しさん :03/07/10 03:31
>>60
そうしないと未定義

65 名前:デフォルトの名無しさん :03/07/10 07:03
>>60
Aのサイズでヒープを開放しようとするのでヒープ領域が破壊される
ヨカーン。

66 名前:デフォルトの名無しさん :03/07/10 07:07
>>62
えーやだなー

67 名前:デフォルトの名無しさん :03/07/10 09:30
質問お願いします。

あるデータに関するクラスAがあり、
そのクラスのオブジェクトを集約リストとして持っているクラスBが別にあります。
クラスAのオブジェクトは、全てそのリストで管理されています。
クラスBは他に妥当なクラスがないという消極的な理由から、クラスAのリストを保持してます。

そこでお尋ねしたいのですが、このリストに対する操作(ソートや全検索など)を
実装する場合、それをクラスBのメンバ関数とするのと、クラスAの静的メンバ関数に
するの、どちらが妥当でしょうか?

68 名前:デフォルトの名無しさん :03/07/10 09:33
えっと別スレで聞いたのですが説明なしで自己満足で終わられたみ
たいなのでこのスレに投げます。

SYOTI_F( char * ) test_time SYORI_P(( const time_t *tp, char *buf ));

とGCCで書いてあるヘッダをC++Builderでコンパイルすると
[C++ エラー] test.h(38): E2293 ) が必要

となるのですがこれはSYOTI_F( char * ) を返り値とした関数
の宣言と考えて良いでしょうか?

69 名前:デフォルトの名無しさん :03/07/10 09:37
>>67
そのリストがどこに所属しているかによる。

クラスAの設計の一部として(クラスAが成り立つために必須)存在しているのならクラスAのメンバにすべき。

それとも、クラスAは単独で存在できるけど、たまたま今回のプログラムではそれをリスト上で管理しているのならクラスBのようなコレクションクラスのメンバにすべき。

70 名前:デフォルトの名無しさん :03/07/10 09:44
>>68
おそらくSYOTI_FとSYORI_Pはマクロだと思うが、それが定義されていないためのエラーってことはない?


71 名前:デフォルトの名無しさん :03/07/10 09:45
>>68
× SYOTI_F
○ SYORI_F
のタイプミスが原因に 1000 ガバス。

72 名前:67 :03/07/10 09:53
>>69
レスありがとうございます。なるほど、
リストというデータの帰属を問えば良いのですね。

今回の私のケースは、69さんの二行目に反するようです。
(二行目の様にリストの内包が必須なクラスを、今ちょっと想像出来なくて、少しだけ不安ですが)

ですのでBのメンバにしようと思います。御陰で吹っ切れました。重ね重ね感謝です。

73 名前:デフォルトの名無しさん :03/07/10 09:57
>>70
定義って#define以外に?

74 名前:デフォルトの名無しさん :03/07/10 09:59
>>68
こっちにも書いとく。

>えっと別スレで聞いたのですが説明なしで自己満足で終わられたみ
>たいなのでこのスレに投げます。

回答してくれる人をなんだと思ってるんだ?
おまえの質問に答えてやるためだけに常駐してるとでも思ってるの?

75 名前:デフォルトの名無しさん :03/07/10 10:02
>>74
意味の通らないことを散々書いておいて、突然はたと居なくなるのが
自己満足以外のなんだというんですか?w
質問者に礼儀が必要なのはもちろんですが、回答者にだって必要かと..ww

76 名前:デフォルトの名無しさん :03/07/10 10:03
C++には、VBのStrConv関数のようにSHIFT-JISをUnicodeに変換する関数はないのでしょうか?
以下のような関数を自作できないこともないとは思いますが。
if((fi=fopen(source,"rb"))!=NULL)
if((fo=fopen(target,"wb"))!=NULL){
printf("Start conversion\n");
fputc(255,fo);
fputc(254,fo);
while((c = fgetc(fi))!=EOF){
後略


77 名前:デフォルトの名無しさん :03/07/10 10:04
分かっている事ばかり答えてもらってもしかたなか(-.-)
分かっている事ばかり答えてもらってもしかたなか(-.-)
分かっている事ばかり答えてもらってもしかたなか(-.-)

78 名前:デフォルトの名無しさん :03/07/10 10:05
俺は68がまったく意味不明なんだが

79 名前:デフォルトの名無しさん :03/07/10 10:05
相互リンク
http://pc2.2ch.net/test/read.cgi/tech/1054280736/491-

80 名前:デフォルトの名無しさん :03/07/10 10:07
>>75
あのね質問に全部答えても解答がでてないの〜^^;


81 名前:デフォルトの名無しさん :03/07/10 10:09
ウンコ野郎にマジレスしちまった・・・鬱

>>79
被害の拡大を防いでくれてありがとう

82 名前:デフォルトの名無しさん :03/07/10 10:10
>>75
>突然はたと居なくなるのが

あたりまえ。おまえみたいに暇な人ばかりじゃない。

83 名前:デフォルトの名無しさん :03/07/10 10:11
>>80
みすだ

84 名前:デフォルトの名無しさん :03/07/10 10:12
>>81
答える事ができないのに偉そうなのがむかつく

85 名前:デフォルトの名無しさん :03/07/10 10:17
>>81
分からないのに偉そうにあれを調べろこれを調べろ
って時間の無駄〜他の人にしないで下さいね

86 名前:デフォルトの名無しさん :03/07/10 10:21
>>76
標準C++には無いよ
ライブラリかOSの機能をつかうべし

87 名前:デフォルトの名無しさん :03/07/10 10:39
>>86
行いたい機能から関数を逆にたどるのがむずかしいのですが、
Borland C++ Compiler 5.5のライブラリの中にはSHIFT-JISをUnicodeに変換する関数などはないのでしょうか?

88 名前:デフォルトの名無しさん :03/07/10 10:40
>>76
mbstowcs 関数というのがある。
ヘッダファイルは cstdlib 。
ただし、Shift-JIS を使っている OS に限る。

89 名前:デフォルトの名無しさん :03/07/10 10:47
>>88
wchar_tがうにコードとは限らな(略

90 名前:デフォルトの名無しさん :03/07/10 14:01
>>88
mbstowcs()とwcstombs()がありました。ありがとうございました。

91 名前:デフォルトの名無しさん :03/07/10 14:17
Cを始めて勉強するのにお勧めな本はありますか?

92 名前:デフォルトの名無しさん :03/07/10 14:18

昔、私がTemplateすれに貼り付けたもの。
C++ でワイド文字をマルチバイト文字列に変換

std::localeloc( "japanese" );
std::locale::global( loc );

std::wstring source( L"(・∀・)" );
std::string result( source.size()*2, char() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.narrow( &*source.begin(),&*source.end(),'?',&result[0]);

std::wcout << L"wide : " << source << std::endl;
std::cout << "narrow : " << result << std::endl;

結果
wide  : (・∀・)
narrow : (・∀・)

マルチバイト文字列からワイド文字列へは、

std::string source( "(・∀・)" );
std::wstring result( source.size(), wchar_t() );
const std::ctype< wchar_t >& ct = std::use_facet< std::ctype<wchar_t> >( loc );
ct.widen( &*source.begin(),&*source.end(),&result[0]);

VCで確認済みだが、他の環境(UNIXとか)では知らん


93 名前:92 :03/07/10 14:23
こぴぺミス。

×std::localeloc("japanese");
○std::locale loc("japanese");

他にもミスあるかも…

94 名前:デフォルトの名無しさん :03/07/10 14:45
>>92
VC++7.0 では期待通り動くけど、
VC++7.1 じゃ表示がおかしくなるね。

なんか違うのかな?

95 名前:デフォルトの名無しさん :03/07/10 17:57
前スレ>>944
http://pc2.2ch.net/test/read.cgi/tech/1055162298/944
亀レスだけど

typedef Typelist<class1,Typelist<class2,Typelist<class3,NullType> > > ClassList;

class Base{
public:
    virtual int GetID()=0;
    virtual ~Base(){}
};
template <typename classname>
class BaseImpl:Base{
    int GetID(){
        return IndexOf<classname>::value;
    }
};
class class1:public BaseImpl<class1>{
};

96 名前:デフォルトの名無しさん :03/07/10 17:57

class AbortType{
public:
    AbortType(){abort();}
};
class Factory{
public:
    Base * Create(int ID){
        switch(ID){
        case 0:return new TypeAtNonStrict<ClassList,0,AbortType>::Result;
        case 1:return new TypeAtNonStrict<ClassList,1,AbortType>::Result;
        case 2:return new TypeAtNonStrict<ClassList,2,AbortType>::Result;
        //...
        }
        //static Base * (*Funcptr[ClassList])()={TypeAtNonStrict<ClassList,0,AbortType>::Result::operator new(),
        //TypeAtNonStrict<ClassList,1,AbortType>::Result::operator new()};
        abort();
    };
};
Factoryはperlとか使って出力しておく。
templateスレへ行けとか言われそうな気もするけど思いついたので。
typelistとかTypeAtとかも書くと長くなりそうなので省略


97 名前:デフォルトの名無しさん :03/07/10 18:49
>68
そう考えてよい。以上。

98 名前:デフォルトの名無しさん :03/07/10 19:02
UTF8でファイルの読み書きしたい場合、C++標準ライブラリとかありますか?

99 名前:デフォルトの名無しさん :03/07/10 19:04
標準には存在しない。

100 名前:デフォルトの名無しさん :03/07/10 19:57
>>96
そういうときこそpreprosessor-metaprogrammingだ

101 名前:デフォルトの名無しさん :03/07/10 22:33
>>98
あつかっている文字が始めから最後までUTF8なら
通常の読み書きの関数をそのまま使えば済む話だけど、
具体的にどういうことがしたいの?

102 名前:デフォルトの名無しさん :03/07/10 23:08
初心者の質問ですみませんが、以下のコードがg++でコンパイル時にエラーとなります。
何故でしょうか?static をはずすか、又はコンストラクタ内で static メンバ
にアクセスしないようにすると問題無くコンパイルが通ります。

% g++ a.cpp
/tmp/ccC2TuDO.o: In function `Hoge::Hoge(void)':
/tmp/ccC2TuDO.o(.Hoge::gnu.linkonce.t.(void)+0x5): undefined reference to `Hoge::x'
collect2: ld returned 1 exit status



103 名前:102続き :03/07/10 23:08
#include <stdio.h>

class Hoge {
static int x;
public:
Hoge() { x = 0; }
void SetHoge(int a) { x = a; }
int GetHoge() { return x; }
};

class Hoge2 {

Hoge hoge;
int y;
public:
Hoge2() { y = 0; }
Hoge2(int b) { y = b; }
void SetHoge2(int a) { y = a; }
int GetHoge2() { return y; }
};
main()
{
Hoge2 hoge2;
printf("%d\n", hoge2.GetHoge2());
}


104 名前:デフォルトの名無しさん :03/07/10 23:09
どこにもプログラムコードが無いんだが

105 名前:104 :03/07/10 23:09
すんまそ、勇み足ですた。

106 名前:104 :03/07/10 23:12
>>103
Hoge() { Hoge::x = 0; }
void SetHoge(int a) { Hoge::x = a; }
int GetHoge() { return Hoge::x; }

こうすればOK

107 名前:デフォルトの名無しさん :03/07/10 23:23
>>104-106
もちつけ(;´Д`)とりあえずニラ茶でも飲んでだな・・・

>>103
Hoge クラスを宣言し終わった後らへんに
int Hoge::x = 0;
としてやるべし。静的メンバは,クラスの外のどこかで
実体とでも言うべきモノを定義してやる必要がある。

108 名前:名無し@沢山 :03/07/10 23:26
>>102
ヌヒよ、それはコンパイル時のエラーちゃうやん。コンパイルは通ってるやん。

109 名前:102 :03/07/11 00:51
どもです。

>>104さん
そのようにやってみた所、やはり同様のエラーがでてしまいますた。(;;)

>>107さん
確かに外側で初期化したら通りました!ありがとうございました。
しかし何故外で再?定義してやらないといけないのか今一分かりません。

>>108
正確でなく、すみません。リンカーの方ですた。


110 名前:102 :03/07/11 00:52
あうっ


>>108


>>108さん


111 名前:デフォルトの名無しさん :03/07/11 01:38
>>109
クラス定義の中に書いてるのは変数の定義じゃなくてただの宣言。
これがもし定義だったらどうなるか考えてみれ。
軒並みシンボルの重複でリンクエラーになるぞ。

112 名前:デフォルトの名無しさん :03/07/11 10:06
VC++ .NET + DirectXの質問ですが、適切なスレが無さそうなのでここで質問させて頂きます。

VC++ .NETでDirectX 9.0 SDKについていたサンプルプログラムをビルドしようとしているのですが
DirectPlayを使用するプログラムはビルドすることが出来ません。
その際表示されるエラーメッセージが
「ChatPeer fatal error LNK1181: 入力ファイル 'dplay.lib' を開けません。」
というようなものです。

VC++ .NETの方ではインクルードファイル、ライブラリファイルともパスは通してあります。
ただパスを通したディレクトリに 'dplay.lib' ファイルはやはり無いんですよね。
'dplayx.lib' とは全く別物のようですし。

どなたか分かる方がいましたらよろしくお願いします。

113 名前:デフォルトの名無しさん :03/07/11 10:10
> 適切なスレが無さそうなので
ハァ?

114 名前:デフォルトの名無しさん :03/07/11 10:52
無くてもリンクできる。以上。

115 名前:112 :03/07/11 11:13
>>114
しかし実際エラーが出てしまいます。
IDEのバージョンを一応記載しておきます。
VC++ .NET Standard 2003です。

116 名前:デフォルトの名無しさん :03/07/11 11:14
削れといっている。以上。

117 名前:デフォルトの名無しさん :03/07/11 11:15
いいよもう、すれ違いなんだから、無視しようよ。

118 名前:デフォルトの名無しさん :03/07/11 11:22
もしかしてやり方がまずいのでしょうか。
IDE起動後、
ファイル→
開く→
プロジェクト→
(例えばaddressoverride.vcprojを選択後)開く

その後
ビルド→
ソリューションのビルド

ここでコンパイルエラーになります。

>>116
もう少し詳しく言ってくださるとありがたいです。

119 名前:デフォルトの名無しさん :03/07/11 11:32
厚顔無恥とはよくいったもんだ( ´∀`)

120 名前:デフォルトの名無しさん :03/07/11 11:32
>>118
鬱だ氏のう DirectX (Part 9)
http://pc2.2ch.net/test/read.cgi/tech/1054553472/


121 名前:112 :03/07/11 11:34
>>120
こんなスレがあったのですね。誘導ありがとうございます。
どうもご迷惑をおかけしました。


122 名前:デフォルトの名無しさん :03/07/11 15:41
>>119
葉夏至区同意。

123 名前:デフォルトの名無しさん :03/07/11 19:24
>>100
#define MAX_FACTORY_SIZE 100
#define MACRO01(dummy,i,arg2) case i:return new TypeAtNonStrict<ClassList,i,AbortType>::Result;
//template <int i>struct int2int{
//    enum{value=i};
//};

class Factory{
public:
    Base * Create(int ID){
        switch(ID){
        BOOST_PP_REPEAT(MAX_FACTORY_SIZE,MACRO01,arg2_dummy)
        //BOOST_PP_REPEAT(int2int<100>::value,MACRO01,arg2_dummy)
        }
        abort();
    };
};
さらに手を加えればより使いやすくなるだろうけど
ただ、Factoryのサイズをdefineで定義しないといけないけど。


124 名前:デフォルトの名無しさん :03/07/11 19:42
PP最高!!!

125 名前:デフォルトの名無しさん :03/07/12 20:47
Cを勉強せずにC++をマスターすることは可能ですか?

126 名前:デフォルトの名無しさん :03/07/12 20:58
>>125
マスターすることは不可能。
でも使うことはできる。

127 名前:デフォルトの名無しさん :03/07/12 21:05
完璧なマスターは不可能だけど
C++でプログラムを組むことは可能ということですね?
ありがとうございました。
がんばります。


128 名前:デフォルトの名無しさん :03/07/12 21:38
結果的にC++を熟知する頃にはCをかなり深く理解しているだろうね。
CとC"++"だけあって、C++の勉強が、そのままCの勉強ことであったりするだろうし。
個人的には、Cをある程度かじってからのほうが近道のように感じる。

129 名前:デフォルトの名無しさん :03/07/12 22:15
C++は初心者が引っかかりそうな事項が多いからなぁ

130 名前:デフォルトの名無しさん :03/07/12 22:21
でも一方で、初心者が引っかかりそうなポインタなんかを後回しに勉強出来る
から良いって見方もあったりもするわけで。

131 名前:デフォルトの名無しさん :03/07/12 23:09
参照は便利だよなぁ。

132 名前:デフォルトの名無しさん :03/07/12 23:41
参照とポインタの違いは?

133 名前:デフォルトの名無しさん :03/07/12 23:49
>>132
知らないのか?
納豆にネギを刻むと美味いんだ。

134 名前:デフォルトの名無しさん :03/07/12 23:52
山椒とボニータの違いは??

135 名前:デフォルトの名無しさん :03/07/12 23:54
>>131
今年は7/25が土用丑か

136 名前:デフォルトの名無しさん :03/07/13 00:29
梅干も食わねえとな

137 名前:デフォルトの名無しさん :03/07/13 00:41
関数ポインタを参照(゚д゚)ウマー

138 名前:デフォルトの名無しさん :03/07/13 00:44
土用丑の日に鰻なんて、
平賀源内の思惑に乗っちゃだめだ!

139 名前:デフォルトの名無しさん :03/07/13 02:00
int main() {
int *p;
int a=100;

p=&a;

func(p);

return 0;
}

void func( int &aaa ) {
cout << aaa << endl;
}

error C2664: 'func' : 1 番目の引数を 'int *' から 'int &' に変換できません。

参照にポインタを渡す方法はありますか?

140 名前:デフォルトの名無しさん :03/07/13 02:01
func(*p);

141 名前:デフォルトの名無しさん :03/07/13 02:09
>>140
あ、うまくいきましたー。
あれー?
さっき同じ事やった時はコンパイラとおらなかったんだが
勘違いだったかな
ありがとうございました

142 名前:デフォルトの名無しさん :03/07/13 03:16
class Test{
public:
    //...
    Test & operator=(int arg){
        //...
        return *this;
    }
};

まあこれも同じことで。


143 名前:バッファ :03/07/13 03:17
winsock2 を使っているのですが
struct Request {
int v;
char *n;
char *a;
} req = {1,"sample","sample"};

という構造体を送信データバッファとして

send(s, (char*)&req,sizeof(Request), 0);

と書いて送信するのは正しいでしょうか?




144 名前:デフォルトの名無しさん :03/07/13 04:24
>>143
ポインタを送信しても意味が無いと思われ。

145 名前:デフォルトの名無しさん :03/07/13 11:57
>>144
スレッド間通信に使ってるのかもしれないじゃん(和良

146 名前:デフォルトの名無しさん :03/07/13 15:06
'あ' みたいな2バイト長の文字定数って、やっぱり、標準ではみとめられて
ないのかな? 実際には(警告はでるけど)たいていのコンパイラで使える
みたいだけど。これを使って、

// 文字列コンバータのファンクタ
template<int C> struct Converter {
string operator()( const char* s );
};

// ソースがEUCで書かれている場合
template<> struct Converter<0xa4a2> { // 0xa4a2 == EUC('あ')
string operator()( const char* s );
};

// このソースの文字コード用のコンバータ
typedef Converter<(unsigned short)'あ'> ConverterT;

int main()
{
string s = ConverterT()( "あいうえお" );
}

みたいなことをやりたいんだけど…


147 名前:デフォルトの名無しさん :03/07/13 15:12
>>146
L'あ' (wchar_t型)だべ

148 名前:デフォルトの名無しさん :03/07/13 16:03
visual studio 2003は
C++の例外指定に対応した?

149 名前:デフォルトの名無しさん :03/07/13 16:07
ANSI C++ 規格と
ISO C++ 規格はなにが違うの?


150 名前:デフォルトの名無しさん :03/07/13 16:12
>>148
どういうこと?
例外指定ってexception-specificaation?
void hoge() throw(std::runtime_error) {...}とかこういうやつ?
記述はVC6の頃から通ったと思うが。

記述されていない例外を投げるとunexpected()が呼ばれる動作とか
してなかったんだっけ?

151 名前:デフォルトの名無しさん :03/07/13 16:12
windows環境での最強のC++コンパイラは
実質 VS .net 2003に付属する
コンパイラってことになっちまった?

152 名前:デフォルトの名無しさん :03/07/13 16:13
>>151
exportは無いけど、総合的にはそうなってしまったようだ

153 名前:デフォルトの名無しさん :03/07/13 16:14
>>150

いや、warningだよ。
文法的に解釈はしてくれてるようだけど、
実装はされていないよ。

154 名前:デフォルトの名無しさん :03/07/13 16:16
throw(type)
The function can throw an exception of type type. However, in Visual C++ .NET, this is equivalent to throw(...).

まだ対応してない模様

155 名前:デフォルトの名無しさん :03/07/13 16:20
VS.NET 2003のmsdn library見ると:

Function exception specifiers other than throw() are parsed but not used. For example:

void f() throw(int); // parsed but not used
void g() throw(); // parsed and used
For more information on exception specifications, see Exception Specifications.

ほんとだ。

156 名前:デフォルトの名無しさん :03/07/13 16:36
>>155

thanx

157 名前:デフォルトの名無しさん :03/07/13 18:28
>>149
昔は ANSI(アメリカ国内) だけでやってたのを ISO(国際) で標準化するようになったってだけ。
ISO/ANSI C++ とかいう言い方することもあるし。


158 名前:146 :03/07/13 19:19
>>147
> L'あ'
g++ 3.2.2 だと warning: character constant too long とかいわれますね。
それに、L をつけると元の EUCなりSJISなりではなくなってしまう気が。

159 名前:デフォルトの名無しさん :03/07/13 23:36
>>158
g++で比較すんな!

160 名前:デフォルトの名無しさん :03/07/14 00:22
柴田望洋の「プログラミング講義 C++」を買ってきました。
明日からちょっとづつ読むことにします。

161 名前:デフォルトの名無しさん :03/07/14 00:27
望洋さんはいいよねー。
「Cのエキスパート」感があって、安心できる。
俺も奴の本で勉強した。



162 名前:デフォルトの名無しさん :03/07/14 00:31
>>161
「望洋さん」と「奴」の組み合わせにワラタ

163 名前:デフォルトの名無しさん :03/07/15 09:09
class A
{
public:
 virtual ~A();
 int x;
};
A a[2];

↑という定義がある( A はPODではない)とき、↓の式の結果は定まりますか?

reinterpret_cast<int*>(reinterpret_cast<char*>(&a[0].x) + sizeof(A)) == &a[1].x

164 名前:デフォルトの名無しさん :03/07/15 09:34
>>163
定まる。
パディングとか考慮しても
sizeof (A) は a[0] と a[1] の距離と等しくなることが
確か保証されてた筈だから、
その要素間の距離も sizeof (A) で OK 。

int* → char* の変換でアドレスが変わるような特殊な環境でも
char* → int* の変換でちゃんと元に戻される...と思うので大丈夫。
こんな変な環境を使ってる人が今いるのかどうか知らんが。

165 名前:163 :03/07/15 09:48
1.8 -5- に、
"An object of POD type shall occupy contiguous bytes of storage."
って書いてあるので、保証されてるのはPODだけだったりしませんか?

166 名前:デフォルトの名無しさん :03/07/15 10:06
int*とchar*でポインタ表現が異なる環境でもreinterpret_castで問題はないのですか?

167 名前:デフォルトの名無しさん :03/07/15 10:25
ポインタ表現が異なるの意味が分からんが、reinterpret_castはビット変化しないよ。

168 名前:166 :03/07/15 10:29
ポインタ表現 -> 内部表現
でした。つまりソース表記上では同じアドレスでもint*とchar*とで内部表現が異なる環境で
reinterpret_castしても問題は起こり得ないのでしょうか?

169 名前:デフォルトの名無しさん :03/07/15 10:32
> ソース表記上では同じアドレス
やっぱり意味がわからん。

170 名前:デフォルトの名無しさん :03/07/15 10:36
俺も分からん。
>>166は「内部表現が異なる」の具体例を明示して説明すること。

171 名前:デフォルトの名無しさん :03/07/15 10:43
ageとこう。

172 名前:166 :03/07/15 10:50
すまそ、寝ぼけてNULLポインタ周りの話(0の内部表現の話)とごっちゃになってます。頭冷やしてこよう。

173 名前:デフォルトの名無しさん :03/07/15 11:27
その調子じゃNULLポインタ周りも理解して無さそうだな。

174 名前:デフォルトの名無しさん :03/07/15 11:40
こういうことだろ

char *pc = hogehoge;
int *pi = reinterpret_cast<int *>(pc);
if ( sizeof(char *)!=sizeof(int *) && memcmp( &pc, &pi, sizeof(char *) ) )
{
piとpcは同じアドレスをさすが内部表現は違う
}

175 名前:174 :03/07/15 11:42
すまん
&& -> ||

176 名前:デフォルトの名無しさん :03/07/15 11:49
それを内部表現というのか

177 名前:166 :03/07/15 12:16
確認したいのですが>>174氏の例で、sizeof(char*)==sizeof(int*)を満たしているときは
memcmp(&pc,&pi,sizeof(char*))は常に0を返すと考えて良いのでしょうか。

178 名前:166 :03/07/15 12:21
あれ何か違うな。memcmp確認。

179 名前:166 :03/07/15 12:31
勘違いでした。
失礼。

180 名前:デフォルトの名無しさん :03/07/15 13:45
>>165
これは、例えば int の 4 バイト(の環境として)が
連続する 4 つのバイトに確保される、ということでは?

○ xxxxooooxxxxxxxx
× xxxxooxxoxxxoxxx

で、規格見つけた。

5.3.3 -2- より抜粋
When applied to a class, the results is the number of bytes
in an object of that class including any padding
required for placing objects of that type in an array.
クラスに(sizeof を)適用した場合の結果は、
配列として配置した場合に要求されるあらゆるパディングを含めた、
そのクラスのオブジェクトのバイト数になる。

181 名前:山崎 渉 :03/07/15 14:04

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

182 名前:デフォルトの名無しさん :03/07/15 15:49
CTest test;
test.method();

と書いても

CTest pTest;
pTest = new CTest();
pTest->method();
delete pTest;

と書いても

結果おんなじですよね。

newする必要性を教えて下さい。


183 名前:デフォルトの名無しさん :03/07/15 16:00
>>182
その場合は new する必要性は無い。

>>177
http://www.catnet.ne.jp/kouno/c_faq/c5.html#6
> データの型が異なるとポインターの内部表現が異なるマシンがある
ので、常に 0 を返すとは限らない。

184 名前:182 :03/07/15 16:51
おお。
やっぱり、単純な奴は必要ないのですね。

newの
必要性があるのは、
どんな時でしょうか?

内部パラメータが大きい時とかですか?
結局確保するんだから、さいしょから CTest test;でも、
いいような気がするんですが。

185 名前:デフォルトの名無しさん :03/07/15 16:55
>>184
そのオブジェクトを作る必要がそのときどきで異なるとき

186 名前:デフォルトの名無しさん :03/07/15 17:00
>>184
> 内部パラメータが大きい時とかですか?
CTest test; とすると(普通は)スタックに確保され、
new CTest; とすると(普通は)ヒープに確保される。
(普通は)スタックは小さく、ヒープは潤沢なので、
確かに巨大なものを確保する時には new を使う。

187 名前:デフォルトの名無しさん :03/07/15 17:01
今風に言えばフリーストアか? >ヒープ
律儀にフリーストアって言葉使ってる人いるけ?

188 名前: :03/07/15 17:24
テキストファイルをバッファに一度に読み込みたいのですがバッファのサイズはどうやって知るの?

char filename[] = "\C\Hello.txt";
std::ifstream f(filnename,std::in);

char* buf = new char[?];
int readsize = f.readsome(buf,?);
buf[?] = \0;

というのを考えたんですけどサイズ(?)はどうやって知るの?
Win32APIにファイルサイズ知るのがあるらしいけどファイルハンドルとか要求してきてよくわかりません。
なんか良い方法ありませんか?

189 名前:デフォルトの名無しさん :03/07/15 17:39
>>188
最後に seekg して tellg 。

190 名前:デフォルトの名無しさん :03/07/15 17:44
>>188
std::stringとか使えば?

#include <iostream>
#include <fstream>
#include <string>
#include <boost/lexical_cast.hpp>

main(){
std::ifstream ifs("Hello.txt");
std::string s=boost::lexical_cast<std::string>(ifs.rdbuf());
std::cout << s;
}

191 名前:デフォルトの名無しさん :03/07/15 18:11
>188
ファイルのサイズじゃなくて、バッファのサイズ?
ヘッダに書かれていると思う。




192 名前:188 :03/07/15 18:47
>>189 >>190 >>191
みなさん、どうも有り難うございます。

>>189
なるほど、そうやればいいんですね。感謝。
>>190
すいません。boostライブラリはまだ自分にはちょっと無理なようです。
>>191
ファイルの内容を全部読み込みたいんです。
テキストファイルの場合は\nが2文字から1文字になる?とかあるとか読んだので
確かにファイルサイズじゃなくて全部読み込めるだけのバッファのサイズのほうが無駄がないのかな?
でもちょっとだけ大きくてもいいのでファイルサイズでもいいけど。
あとヘッダてファイルのヘッダという意味?ただのテキストファイルにもあるの?
それとも違うヘッダのことかな。


193 名前:デフォルトの名無しさん :03/07/15 18:59
バッファとは、「需要側と供給側の間に挟まって、緩衝の役目を果たすもの」を
指します。よって、「バッファのサイズ」とは、「緩衝用途に幾らメモリが割り当て
られているか」であり、「(iostreamの)バッファサイズ」なら、iostreamヘッダを
調べれば判る、という話でしょう。

194 名前:デフォルトの名無しさん :03/07/15 19:07
>>192
std::ifstream ifs("Hello.txt");
std::ostringstream ost << ifs.rdbuf());
std::string s=ost.str()
std::cout << s;


195 名前:188 :03/07/15 19:19
>>188
std::inじゃなくてstd::ios::inだった。

196 名前:デフォルトの名無しさん :03/07/15 19:30
普通こうする
#include <iterator>
#include <fstream>

int main(int,char **av)
{
    ifstream in(av[1]);
    string s((istreambuf_iterator<char>(in)),
             istreambuf_iterator<char>() );
    cout<<s;
}


197 名前:名無し@沢山 :03/07/15 20:33
>>196
ヌヒよ。そのコードは想像を絶するほど遅いぞ。

198 名前:   :03/07/15 21:33
>>191 >>193
すいませんでした。自分の言葉遣いがおかしかったですね。
特にC++の場合はバッファといえばストリームクラスが使ってるバッファのクラスになりますよね。
readやreadsomeの第2引数で指定する、ファイルのデータを読み込んで書き込む領域のこととして誤って使ってました。

>>194 >>196
charの配列に読み込むよりこっちの方がC++らしいですね。
参考にさせていただきます。ありがとうございました。

199 名前:デフォルトの名無しさん :03/07/15 22:26
>>197
想像を絶する遅さってどのくらいよ。
そんな低スペックな処理系でC++でプログラム組むんじゃねーよ。
それに、そんなBIGなファイルを一気に読みこもーなんて、ふつう、しないよ。

200 名前:デフォルトの名無しさん :03/07/15 22:41
C/C++でパフォーマンスを否定しちゃいかんよ

201 名前:デフォルトの名無しさん :03/07/15 23:35
>>197
istream_iteratorじゃなくてistreambuf_iteratorだぞ。

202 名前:スタパ風 :03/07/15 23:55
>>200
最近はそーでもない。

と思ったが C/C++ ですか…。
俺は C++ で飯食ってますが、 C/C++ なんて言語の事は知らないしな。
とりあえず C++ は「ここは可読性低くていいからとにかく速く」と
「ここはメンテしやすくいこうっと」の使い分けが大事な言語だと思った。
逆にいえばその使い分けができる言語だと思った。
そして求人広告によく載っている C/C++ ってどんな言語なんだろうと思った。

203 名前:163 :03/07/16 00:04
>>180
> 配列として配置した場合に要求される

こういう限定があるってことは、
非PODオブジェクトのメンバが、配列として配置したバイト列内に
存在する保証はないということになりませんか?

204 名前:デフォルトの名無しさん :03/07/16 00:14
>>201
freadでのsetvbufに相当するのはistreambuf_iteratorではどうやればいいの?

205 名前:デフォルトの名無しさん :03/07/16 00:24
>>204
streambufのpubsetbufでする。

206 名前:デフォルトの名無しさん :03/07/16 00:41
実際windows環境じゃ役にたたない罠。

207 名前:名無し@沢山 :03/07/16 00:42
>>199
おれの想像を絶したぐらいの遅さだよ。

>>201
分かってるよ。

208 名前:デフォルトの名無しさん :03/07/16 01:00
>>203
んー。言ってる意味がよく分からん。

例えば
struct AB {
 int a;
 short b;
};
とした時、単独では別に b の後のパディングは必要ないかもしれない。
AB ab;
short c;
としたときに、ab.b と c がくっついてても問題なさそうに見える。

でも、配列にしたとき int, short, int, short となるから、
5.3.3 -2- の仕様から AB::b の後にはパディングが入る
(パディングの入れ方は環境依存だけど、こうなることが多い)。
sizeof (AB) が 8(の環境とする)になるわけだから、
単独で確保してもやっぱり 8 バイトじゃなくちゃまずいということになる。
だから、AB ab; short c; でもパディングは入るし、
そのパディングのサイズは AB のサイズの中に織り込み済みである。

と、そういうことを表した仕様だと思われ。

209 名前:163 :03/07/16 01:18
>>208
メモリレイアウトについての規格が軒並みPOD型についてに限定してあったりするので、
非POD型については、メンバごとに全然違うメモリ領域に配置するような実装を
許そうとしているような気配を感じたのです。
(そのような実装が有利になるような環境は、現状では存在しないとは思います。)

210 名前:名無し@沢山 :03/07/16 01:20
おまいらよ。どれくらい想像を絶するかおまいらにも体験してもらおうと思って
実際にプログラムを書いてみたよ。Windows専用ですまんよ。
適当なfileという名前のファイルを用意してくれよ。

//前半

#include  <windows.h>
#pragma  comment(lib,"winmm.lib")
class  Timer{
public:
  Timer(){  start();  }  
  void  start(){  prev_time_=timeGetTime();  }
  unsigned  long  get()  const{  return  timeGetTime()-prev_time_;  }
private:
  unsigned  long  prev_time_;
};


211 名前:名無し@沢山 :03/07/16 01:21
//後半

#include  <iterator>  
#include  <fstream>  
#include  <iostream>  
using  namespace  std;
int  main(){  
  {
    Timer  t;
    ifstream  in("file",ios_base::binary);
    char  buf[10000];
    string  s;
    while(in){
      in.read(buf,10000);
      s.append(buf,buf+in.gcount());
    }
    cout<<t.get()<<endl;  
  }

  {
    Timer  t;
    ifstream  in("c",ios_base::binary);
    string  s(istreambuf_iterator<char>(in),istreambuf_iterator<char>()  );  
    cout<<t.get()<<endl;  
  }
}  


212 名前:名無し@沢山 :03/07/16 01:23
おまいら二つ目のifstreamに渡すファイル名を変え忘れたよ。
"c"から"file"に替えてくれよ

213 名前:デフォルトの名無しさん :03/07/16 01:24
>>209
確か POD 型のメモリレイアウトは宣言順+パディング可だったはずです。
他にも仮想関数テーブルやら継承した場合やら色々仕様はあると思いますが、
基本的にはそんなもんかと。

1.8 -5- で POD 型を含めていないのは POD 型はパディング可だということを
言いたいのだと思います。
でも、パディング込みで考えれば連続領域(別の変数が割り込まない)で、
そのサイズは sizeof で得られる、
というようなことは、多分仕様に書いてあると思います(まだ調べてませんが)。

214 名前:213 :03/07/16 01:26
POD 型と非 POD 型を逆に書いてしもた。すまん。
たまにしか使わない用語なので。

215 名前:名無し@沢山 :03/07/16 01:27
ちなみにおれの環境では約300kbのファイルを読むのに

おれバージョンだと108ミリ秒
>>196バージョンだと23694ミリ秒かかるよ

300kbをBigなファイルだといったり
230倍の差を気にしないとかいうならもうプログラマやめたほうがよいよ。

216 名前:名無し@沢山 :03/07/16 01:45
おまいらよ、わざわざコードまで書いてやったのに反応がまったく無いとさみしいよ。

217 名前:デフォルトの名無しさん :03/07/16 02:28
名前が悪いと思われ

218 名前:デフォルトの名無しさん :03/07/16 02:30
>>217
うん、うん、沢山だもんね
もう、君のネタは、沢山だよ

219 名前:デフォルトの名無しさん :03/07/16 11:41
荒らしは完全放置

220 名前:デフォルトの名無しさん :03/07/16 12:00

沢山の話し方は煽りが入っていて気に入らないが、同意せざるを得ないな。


221 名前:デフォルトの名無しさん :03/07/16 18:55
セレロン2GHで3MBくらいのファイルをよみこんでみたら

vc6 stlport使用
リリース mt
沢山バージョンだと46ミリ秒
>>196バージョンだと110ミリ秒かかるよ

デバッグ mt
沢山バージョンだと203ミリ秒
>>196バージョンだと27820ミリ秒かかるよ

12MBだと
リリース mt
沢山バージョンだと203ミリ秒
>>196バージョンだと453秒かかるよ

222 名前:221 :03/07/16 18:56
> デバッグ mt
> >>196バージョンだと27820ミリ秒かかるよ
2782ミリ秒の間違いです。

223 名前:デフォルトの名無しさん :03/07/16 19:49
ちなみに最速はmemory mapped fileで、ファイルサイズ以上のバッファを
確保して一気に読み込みがほぼそれに近い時間で終わる。
以下、ループ実行回数に比例して実行時間が長くなり、1byteのバッファでの
読み込みとistreambuf_iteratorがほぼ同等。

224 名前:名無し@沢山 :03/07/16 20:06
おまいらよ。どうや最適化オプションを忘れてたようだよ。
正直すまんかったよ。

225 名前:名無し@沢山 :03/07/16 20:07
おまいらよ、恥かいたのでこの名前も捨てようとおもうよ。短い間だったけどありがとうよ。

226 名前:名無し@沢山 :03/07/16 20:15
と、書いたけど、もう一度ちゃんと確かめた結果は

おれバージョンは110ミリ秒
>>196バージョンは23655ミリ秒

なんでだよ?VC7に標準で付いてるSTLは死ぬほど遅いのかよ?

227 名前:デフォルトの名無しさん :03/07/16 22:22

とりあえずC#相談室よりは上にいてほしいので
age

228 名前:デフォルトの名無しさん :03/07/16 22:24
バカじゃねーの…

229 名前:デフォルトの名無しさん :03/07/16 22:32
age

230 名前:デフォルトの名無しさん :03/07/16 22:35
http://pc2.2ch.net/test/read.cgi/tech/1051842450/475
> http://pc2.2ch.net/test/read.cgi/tech/1057580107/227
> > とりあえずC#相談室よりは上にいてほしいので
> > age
>
> 必死に対抗するか見てみよう
> age

マジで反応してやがる。にゃははは。

231 名前:デフォルトの名無しさん :03/07/16 22:35
バカだなバカ

232 名前:デフォルトの名無しさん :03/07/16 22:36
>>229
釣れた!(w

233 名前:229 :03/07/16 22:37
>>230-232
俺がオマエラ釣ってるんだって
227と無関係だし

234 名前:ゼーレ01 :03/07/16 22:37
IPの隠し方知ってますか?パス抜きされて困ってます。
誰か助けてください!!お願いします



235 名前:デフォルトの名無しさん :03/07/16 22:38
>>233
諦めれ(w

236 名前:デフォルトの名無しさん :03/07/16 22:39
クソスレ上げんな

237 名前:デフォルトの名無しさん :03/07/16 22:39
すれたいがにていてまぎらわしい

238 名前:デフォルトの名無しさん :03/07/16 22:41
>>237
ここにも顔つければいいんだよ。
c(+_+)とか。

239 名前:デフォルトの名無しさん :03/07/16 22:43
>>233
何のために釣っているんだよ。
なにも内容が無い釣りは
何かに反応したとしか思えないぞ(w

240 名前:デフォルトの名無しさん :03/07/16 22:49
>>238
それ採用!
具体的な顔募集します。

241 名前:デフォルトの名無しさん :03/07/16 22:52
v(・∀-)b

242 名前:デフォルトの名無しさん :03/07/16 22:52
こうして又一人C++盲信者が潰されましたとさ。

243 名前:デフォルトの名無しさん :03/07/16 22:53
c(P_P)

244 名前:229 :03/07/16 22:53
>>239
釣れればなんでもいいし
今回は「age」って書けば十分釣れると思った・・・悪かったよ

245 名前:デフォルトの名無しさん :03/07/16 22:58
C(+ω+`)

246 名前:デフォルトの名無しさん :03/07/16 23:03
(c +_+) < cの部分は耳だよ

247 名前:名無し :03/07/16 23:52
(c +_+)

248 名前:デフォルトの名無しさん :03/07/16 23:57
(c +∀+)アーヒャヒャヒャ

249 名前:デフォルトの名無しさん :03/07/17 00:59
ends<<endl;

250 名前:デフォルトの名無しさん :03/07/17 09:45
1000/4


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