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


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

C++相談室 part55
1 名前:デフォルトの名無しさん :2006/12/01(金) 14:31:34
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

テンプレその他 >>2-15 付近参照

前スレ
C++相談室 part54
http://pc8.2ch.net/test/read.cgi/tech/1159340181/


2 名前:デフォルトの名無しさん :2006/12/01(金) 14:33:01
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://www.cppreference.com/ (英語)
 http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない)
[禿 Stroustrup]
 http://public.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。


3 名前:デフォルトの名無しさん :2006/12/01(金) 14:33:35
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 ttp://www.amazon.com/exec/obidos/ASIN/0201700735/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 ttp://www.amazon.com/exec/obidos/ASIN/0201824701/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 ttp://www.amazon.com/exec/obidos/ASIN/0201379260/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 ttp://www.amazon.com/exec/obidos/ASIN/0201924889/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 ttp://www.amazon.com/exec/obidos/ASIN/020163371X/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 ttp://www.amazon.com/exec/obidos/ASIN/0201615622/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 ttp://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 ttp://www.amazon.com/exec/obidos/ASIN/0201760428/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)
C++ Coding Standards
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716860/ (翻訳)

4 名前:デフォルトの名無しさん :2006/12/01(金) 14:34:39
■Books(Templateまわり)■
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/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/

5 名前:デフォルトの名無しさん :2006/12/01(金) 14:35:17
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache STDCXX http://incubator.apache.org/stdcxx/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

6 名前:デフォルトの名無しさん :2006/12/01(金) 14:44:49
1 http://piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html


7 名前:デフォルトの名無しさん :2006/12/01(金) 14:45:23
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/

8 名前:デフォルトの名無しさん :2006/12/01(金) 14:47:20
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/
37 http://pc5.2ch.net/test/read.cgi/tech/1098543578/
38 http://pc5.2ch.net/test/read.cgi/tech/1101473340/
39 http://pc5.2ch.net/test/read.cgi/tech/1106466303/
39(実質40) http://pc8.2ch.net/test/read.cgi/tech/1106527792/
40(実質41) http://pc8.2ch.net/test/read.cgi/tech/1113408957/
41(実質42) http://pc8.2ch.net/test/read.cgi/tech/1120190961/
43 http://pc8.2ch.net/test/read.cgi/tech/1124113879/
44 http://pc8.2ch.net/test/read.cgi/tech/1128512737/
45 http://pc8.2ch.net/test/read.cgi/tech/1133007604/

9 名前:デフォルトの名無しさん :2006/12/01(金) 14:49:36
46 http://pc8.2ch.net/test/read.cgi/tech/1136690107/
47 http://pc8.2ch.net/test/read.cgi/tech/1139931895/
48 http://pc8.2ch.net/test/read.cgi/tech/1142423595/
49 http://pc8.2ch.net/test/read.cgi/tech/1146185570/
50 http://pc8.2ch.net/test/read.cgi/tech/1149427282/
51 http://pc8.2ch.net/test/read.cgi/tech/1153079297/
52 http://pc8.2ch.net/test/read.cgi/tech/1156525695/

■関連スレ■
多すぎ。とりあえずスレタイ C++ で検索して。
以下、スレタイで見つからなさそうな関連スレ。

Boostを語れゴラァ part3
http://pc8.2ch.net/test/read.cgi/tech/1158991211/
GCCについて part7
http://pc8.2ch.net/test/read.cgi/tech/1145357824/

10 名前:デフォルトの名無しさん :2006/12/01(金) 15:11:28
C++学ぶと、一気に頭髪が後退に?

11 名前:デフォルトの名無しさん :2006/12/01(金) 15:17:00
以下、啓蒙文Ver3.0
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。


12 名前:デフォルトの名無しさん :2006/12/01(金) 15:19:52
>>10
人によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10cmほどしか後退してない。

13 名前:デフォルトの名無しさん :2006/12/01(金) 15:25:23
すげえ。ボーランドのコンパイラ使っといてC++とかいってるよ。この人。

14 名前:デフォルトの名無しさん :2006/12/01(金) 15:30:01
C1010: プリコンパイル済みヘッダーの検索中に予期しない HAGE を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

15 名前:デフォルトの名無しさん :2006/12/01(金) 15:31:11
キチガイ啓蒙文は無視な。
好きなようにやれ。

16 名前:デフォルトの名無しさん :2006/12/01(金) 15:37:39
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。

17 名前:デフォルトの名無しさん :2006/12/01(金) 15:46:49
11 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
16 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

18 名前:デフォルトの名無しさん :2006/12/01(金) 15:47:37
#include <stdaderance.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁ付け毛ぐらいにはなったな。
うむごくろう。

19 名前:デフォルトの名無しさん :2006/12/01(金) 15:48:18
Boostつかうと一気に実行ファイルサイズが100倍に?!

環境によるだろ。
俺はVC++に /Yc オプションを指定して、極力
プリコンパイルヘッダを使用するようにして使っているが、例えばboost::lambdaを
使っても使わない時と比べ10秒ほどしか増えない。

20 名前:デフォルトの名無しさん :2006/12/01(金) 15:51:08
任意のタイミングでファイルオープンとファイルクローズが出来るデバックツール探してます。
CreateFileとかCopyFile等の動作チェック用です。
自分で作ってもいんですが、既に多機能な機能やグラフィカルなツールがあるかもしれないので探しています。
VisualStudioパッケージあるかもしれんがようわからん。
誰か知らないか?

21 名前:デフォルトの名無しさん :2006/12/01(金) 15:52:43
>>12
std恐るべし((((;゜Д゜)))

22 名前:デフォルトの名無しさん :2006/12/01(金) 15:56:33
>>20は自らエスパーを呼び寄せることにした…

23 名前:デフォルトの名無しさん :2006/12/01(金) 16:19:04
>>20
スレ違い

24 名前:デフォルトの名無しさん :2006/12/01(金) 16:37:04
>>20
これって前スレの頭の方にあった質問だね。
テンプレに入れる事にしたのか。

25 名前:デフォルトの名無しさん :2006/12/01(金) 16:51:04
もうテンプレ増やさなくてもいいじゃないかと思うんだけどなぁ。
前スレ後半から新スレへくるようなお客さんが引いちゃうし、なにより飽きた。


26 名前:デフォルトの名無しさん :2006/12/01(金) 17:02:08
テンプレートを使ったコードを、ヘッダとソースに分離したいと考え、
http://docs.sun.com/source/806-4838/Ch2.src.html
の最後にある、「テンプレート定義分離型の構成」のサンプルを
VC7.1にてビルドしてみたのですが、以下のようなエラーが出てしまいます。

error LNK2019: 未解決の外部シンボル "int __cdecl twice<int>(int)"
(??$twice@H@@YAHH@Z) が関数 _main で参照されました。

これは何が問題なのでしょうか?
もしや、VCの仕様でしょうか?

27 名前:デフォルトの名無しさん :2006/12/01(金) 17:07:15
>>26
exportキーワードがサポートされてないなら全部ヘッダに書くしかない

28 名前:デフォルトの名無しさん :2006/12/01(金) 17:49:29
どこまでがテンプレなのか
もうわからん

29 名前:デフォルトの名無しさん :2006/12/01(金) 19:48:26
Q
NGにしてるヤツが「番号が飛び飛び」「〜が見えない」とやたらNGにしてることを強調したがるのはどうしてか

A
統合失調症の恐れがあります。
何をされるかわかったもんじゃないので関わらないほうがいいです。

30 名前:デフォルトの名無しさん :2006/12/01(金) 20:12:41
「番号が飛び飛び」というのは一種の揶揄でもある。
書き込んだやつからの反応がほしいんじゃなくて、
自分と同様にあぼ〜んしたやつからの反応がほしいんだろう。

「〜が見えない」の意味が理解できないのは2ちゃん初心者。
SGにでも登録してください。

31 名前:デフォルトの名無しさん :2006/12/01(金) 21:36:14
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。


32 名前:デフォルトの名無しさん :2006/12/01(金) 21:40:23
__(●)(●)((●)((●))(●)(●)(●)ii● l(●)(●)(●)__
 /  (●)(●)(●)(●)(●))(●)(●)(●゙'‐='"(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)(●)(●)))(●)(●)(●)(●)_
 /  (●)(●)(●)(●)(●))(●)(◎)(●))(●)(●)(●)(●)  \
    _(●)(●,,r==、(●))(●)(◎)(●))(●)(●)(●)(●)_
      (●)((ii ,●l)(●))(●)(●)(●)(●)(●)(●)(●)
   __(●)(●゙'‐='"((●))(●)(●)(●))(●)(●)(●)(●)__
 /  (●)(●)(●)(●)(●))(●)(●,,r==、(●)(●)(●)(●)   \
   _ (●)(●)(●)(●)(●)(●)(●)ii ● ))(●)(●)(●)(●)_
 /  (●)(●)(丿"~"i i(●)(●)(●)゙'‐='"(●)(●)(●)(●)  \
    _(●)(●)(",, )(X)ヽヽ(●))(●)(●))(●)(●)(●)(●)_
      (●)(●)\ ヽXヽヽ(●))(●)(●)(≡)(≡)(●)(●)
   __(●)(●)((●\ヽ Xヽヽ(●)((●))(●)(●)(ミ)(●)__
 /  (●)(●),,r==、)( \,",",ソ●(●))(●),,r==、●)(●)   \
   _ (●)(●)ii ,●l)(●)(●)(●)(●)))(●ii● ;)(●)(●)_
 /  (●)(●)゙'‐='"(●)(●))(●)(●)(●))((゙'‐='"(●)(●)  \
    _(●)(●)●)(●)(●))(●)(●)(●))(●)(●)(●)(●)_
  /  (l●)(●)(●),,r==、)(●)(●)(●)(,,r==、)(●)(●l;)  \
  | .  (l;●)(●)(● ,● ))(●))(●)(●)ii ● l)(●)(●)    |
  |  . (0●)(●)(●゙'‐='"●))(●)(●)(゙'‐='"(●))(●)O)    |
  ,;;    (:●)●)(●)(●)(●)(●)(●)(●))(●))(●;)      。
       (о●)(●))(●)(●))(●)(●)(●)(●)●》)
         ( ;●ξ巛:)( ;●ξ(●)(●,--'""ヽ●:( ;)
           巛巛ミ巛ミミミ//二二ノ""^ソ彡
             巛((ミミ((巛ヘ`\┼┼┼ ,!ヽ
                 巛王 \"ヽ-;:,,,,,,ノ /'
                       \,,,,,__,,,ノ


33 名前:デフォルトの名無しさん :2006/12/01(金) 23:18:17
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。


34 名前:デフォルトの名無しさん :2006/12/02(土) 03:18:46
31 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
33 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

35 名前:デフォルトの名無しさん :2006/12/02(土) 05:12:40
皆さん単体テストは何を使っているのですか?

36 名前:デフォルトの名無しさん :2006/12/02(土) 08:59:21


37 名前:デフォルトの名無しさん :2006/12/02(土) 09:14:37
え、俺は体だけど?

38 名前:デフォルトの名無しさん :2006/12/02(土) 11:09:48
単体テストなど頭も手も使わずベロだけでこなしてみせよう

39 名前:デフォルトの名無しさん :2006/12/02(土) 11:55:05
boost::test

40 名前:デフォルトの名無しさん :2006/12/02(土) 15:14:11
::test tobj(/*今日の日付*/20060212);

41 名前:デフォルトの名無しさん :2006/12/02(土) 18:16:27
テンプレートクラスでtemplate<class T>のT型の返り血(値)を返す関数を、インターフェイスを書いたファイルとは別のファイルに記述したいんですが、
どうすれば良いんでしょうか。

42 名前:デフォルトの名無しさん :2006/12/02(土) 18:33:58
//MyFunc.h
template < typename T>
T func() ;

#include "MyFunc.cpp"



export? 何それ食えるの?

43 名前:デフォルトの名無しさん :2006/12/02(土) 19:02:56
テンプレートクラスのフレンド関数も扱い難しいよなあ。
まあフレンドなんて使うなってことだろうが

44 名前:デフォルトの名無しさん :2006/12/02(土) 19:23:42
C++のテンプレートで質問があります。下記のコードをGCC3.4でコンパイルする
とa = 1;、y(); のところでエラーとなってしまいます。this->a = 1;、
this->y();のようにすれば問題ないのです。出来ればthisをつけないようにし
たいのですが、どうすれば良いでしょうか?


template<class T1, class T2>
class A
{
int a;
void y();
};

template<class T1, class T2>
class B
{
void x();
};

template<class T1, class T2>
void B<T1, T2>::x()
{
a = 1;
y();
}

45 名前:デフォルトの名無しさん :2006/12/02(土) 19:26:01
>>44
何これ
BはAを継承してるのか?

46 名前:デフォルトの名無しさん :2006/12/02(土) 19:29:07
>>44のコードはよくわからないけど
privateメンバはサブクラスからはいじれないとかそのへんのことじゃね?

47 名前:デフォルトの名無しさん :2006/12/02(土) 19:31:26
サブクラスに公開するにはprotectedにするあたりはJavaと一緒?

48 名前:44 :2006/12/02(土) 19:33:59
すみません、いろいろと書き忘れていました。BはAを継承していて、Aのメンバは全てpublicです。

template<class T1, class T2>
class A
{
public:
int a;
void y();
};

template<class T1, class T2>
class B: public A<T1, T2>
{
void x();
};

template<class T1, class T2>
void B<T1, T2>::x()
{
a = 1;
}

49 名前:デフォルトの名無しさん :2006/12/02(土) 19:35:15
いろいろいらない物をつけたけど、基本的にデフォルトテンプレートパラメータ
がない時は明示しなければならない

template <class T1, class T2>
class A
{
protected:
int a;
void y() { std::cout << a << std::endl; }
};

template <class T1, class T2>
class B : public A<T1, T2>
{
public:
void x();
};

template <class T1, class T2>
void B<T1, T2>::x()
{
A<T1, T2>::a = 1;
A<T1, T2>::y();
}

50 名前:44 :2006/12/02(土) 19:36:56
>>49
丁寧なレス有り難うございます。

51 名前:44 :2006/12/02(土) 19:41:51
ちょっと興味があるんですが、多重継承でもないのに明示的にA<T1, T2>::のよ
うなものをつける必要があるのはどういった理由からでしょうか?ポインタだ
けでも教えていただけるとうれしいです。

52 名前:デフォルトの名無しさん :2006/12/02(土) 19:47:55
VCならスーパークラスのメソッドはA<T1,T2>::つけなくても呼べたような気がする。
気のせいかな

53 名前:デフォルトの名無しさん :2006/12/02(土) 19:57:31
VS.NET2003だと明示的に書かなくても通った。

54 名前:デフォルトの名無しさん :2006/12/02(土) 19:58:20
>>43
扱いを難しくしてるのは、gccだけだけどなw

55 名前:デフォルトの名無しさん :2006/12/02(土) 20:06:28
残念。それはgccのせいではなく規格のせいであり、つまるところ禿とかのせいなわけで。

56 名前:デフォルトの名無しさん :2006/12/02(土) 20:08:14
VCだと本来typenameがあるべき所に無くても通ったりするな。
プログラマをへたらせるだけだと思うんだが

57 名前:デフォルトの名無しさん :2006/12/02(土) 20:13:17
VC++ 8でtypenameを付けないとコンパイルできなくなったように思う。

58 名前:デフォルトの名無しさん :2006/12/02(土) 20:15:30
直されたんか。それはよかった
規格の不可解な点には必ず理由があると思ってた。
>>49のように書かなければいけないのも(typedefすればすっきりするが)
何か理由があるのだろう。基底クラスが一意に決定できるのにわざわざ
修飾しなければならないのは。

59 名前:デフォルトの名無しさん :2006/12/02(土) 20:30:22
>>58
Aが特殊化されてるかもしれない。

60 名前:デフォルトの名無しさん :2006/12/02(土) 21:28:59
プログラマがへたるっていうより一個一個typenameついてたら美しくない希ガス。
もちっとましな規格にならんもんかしら

61 名前:デフォルトの名無しさん :2006/12/02(土) 21:34:27
0xになると少しは要らなくなるかもしれないらしい。
ttp://d.hatena.ne.jp/mb2sync/20061123#p1

62 名前:デフォルトの名無しさん :2006/12/02(土) 21:42:05
>>61
そこで書かれているのは typename が要らなくなる,ではなくて
現在の仕様だと typename を書くことが禁止されていた場所に
typename を書いても許されるようになる,ということだけだと思います.
この規格の変更で 60 さんの不満が解消することは恐らくないかと.

63 名前:デフォルトの名無しさん :2006/12/03(日) 10:30:18
>>51
two stage lookup ってやつだろ。
B<T1, T2>::x() の定義の前にグローバルな int a; なんて宣言があった場合、
>>48 だとテンプレートのインスタンス化前に行われる名前解決で ::a = 1 と
決定されてしまう。

ここでは a がテンプレートのインスタンス化を行うまで確定しないことを
コンパイラに伝える必要がある。 >>49 はその方法のうちの一つ。
this->a のほうがお勧めだけど。

64 名前:デフォルトの名無しさん :2006/12/03(日) 11:22:12
初心者ですみません

メンバ関数の中でstatic変数使ってるんですけど、これは他のオブジェクトとも共有されるんですかね

65 名前:デフォルトの名無しさん :2006/12/03(日) 11:31:48
class foo{
void func() {
static int a = 0;
printf("a = %d\n", ++a);
}
}

int main(int argc, char*argv[])
{
foo f1, f2;
f1.func();
f2.func();
return 0;
}

66 名前:デフォルトの名無しさん :2006/12/03(日) 11:51:36
スマソ
メンバ変数にすることにします
静的変数ってグローバル変数とほとんど変わらないんですね

67 名前:デフォルトの名無しさん :2006/12/03(日) 20:28:33
C++というより、Cの質問になるのかもしれませんが、
C++組込型において、格上げの規格について教えてください。

signed short s = 0xFFFF;
unsigned long ul = static_cast<unsigned long>(s);

cout << hex << ul << endl;

とした場合、結果は
ffffffff
となりました。

符号有り型から、符号無し型へ格上げした場合、変換後の値は変換先の型に入るだけのビット数を変換前から抜き出したものになる。とプログラミング言語C++第3版 p945には書いてあるのですが、これは違った結果になりました。

最上位bitが1なら、上位ビットは1で埋まるというのは、規格で決まっているのでしょうか?

コンパイラは、Visual C++ 2005 Express edition です。

68 名前:デフォルトの名無しさん :2006/12/03(日) 20:43:40
まあ、あれだな。
cout << (ul==s) << endl;
とやってみてから考えれば?

69 名前:デフォルトの名無しさん :2006/12/03(日) 20:47:00
ああしまった。これじゃ暗黙の型変換で意味がない。
cout << ul << endl;
cout << s << endl;

70 名前:67 :2006/12/03(日) 20:58:25
>>69

4294967295
-1

となりました。うーん、ちょっとまだよく分からないのですが。
何かプログラミング言語C++を読み違えてるんでしょうね・・もう少しジックリ読んでみます。
ありがとう。

71 名前:デフォルトの名無しさん :2006/12/03(日) 21:12:08
符合拡張でぐぐれ。
それからビット数が多い整数から少ない整数に変換する話であって本は間違ってない。

72 名前:デフォルトの名無しさん :2006/12/03(日) 21:15:24
>>67
> signed short s = 0xFFFF;

signed short の最大値が 0xFFFF 以上じゃないと、この時点で値は実装依存だよ。

73 名前:67 :2006/12/03(日) 21:22:56
>>71
符号拡張というんですね。
さっそくググってみます。

>>72
あ、すいません。-1とするべきでしたね。

ご丁寧に、ありがとうございました。

74 名前:デフォルトの名無しさん :2006/12/03(日) 21:24:44
>>71
それを書くなら符号拡張だろ。

だが、ここで関係するのは汎整数拡張だ。int/unsigned intより小さい型の値は、
演算前にintか、intで表すことができなければunsigned intへ拡張されることになっている。


75 名前:デフォルトの名無しさん :2006/12/03(日) 21:39:39
モンテカルロ法でいろいろ計算するプログラムを作っています。

モンテカルロクラスのコンストラクタに、計算対象の純粋仮想クラスへの参照を渡して
計算させたいのですが、下記のようにするとコンパイルエラーとなってしまいます。

class MonteCalro
{
    public:
        explicit MonteCalro(Calculatable& c){cp=c;};
        double calc(const int count);
        
    private:
        MonteCalro();
        Calculatable& cp;
        double getRandomValue(const double range) const;
};

上記の&を*にするとうまくいきますが、
オブジェクトの内容を書き換えられるのがいやなので
なるべくでしたら参照型で渡したいのですが。。
どうしたらよいのでしょうか?

76 名前:デフォルトの名無しさん :2006/12/03(日) 21:43:29
別に参照にしたからといって内容を書き換えられなくなりはしないけど。
-?explicit?MonteCalro(Calculatable&?c){cp=c;};
+?explicit?MonteCalro(Calculatable&?c):cp(c){};


77 名前:デフォルトの名無しさん :2006/12/03(日) 21:47:04
explicitに引っかかってるとか?とりあえず書き換えられたくなかったらconstつけとけ

78 名前:デフォルトの名無しさん :2006/12/03(日) 21:57:22
>>76 うまくいきました。ありがとうございました。正直びびりました
>>77 「参照メンバー 'MonteCalro::cp' は初期化されていない」とエラーになっていました・・
それと、どこにconstをつけたらいいか良く分かりません。
        const Calculatable& cp;
とすると、警告 W8037 montecarlo.cpp 9: const オブジェクトに対して 非 const 関数 'Calculata
ble::getYrange()' が呼ばれた(関数 MonteCalro::calc(const int) ) とでます。。

C++ むずかしい・・・

79 名前:デフォルトの名無しさん :2006/12/03(日) 22:12:16
>>78
Calculatable::getYrange()っていう関数でメンバ変数を書き換えるコードがかかれてない?
constつけるとそういうのはコンパイルエラーになる

80 名前:デフォルトの名無しさん :2006/12/03(日) 22:22:29
>>79 レスありがとうございます

Caluculatableクラスに下記のようにconstつけてみたのですが、
まだ、警告 W8037 montecarlo.cpp 13: const オブジェクトに対して 非 const 関数 'Calculat
able::isInside(const double,const double)' が呼ばれた(関数 MonteCalro::calc(cons
t int) )
とエラーが出ます。isInsideにconstをつけると、継承したクラスで
エラー E2353 main.cpp 17: クラス 'Circle' は抽象クラス('Calculatable::isInside(
const double,const double) = 0' のため)(関数 main(int,char * *) )
とエラーが出ます。がびーん

class Calculatable
{
    public:
        virtual bool isInside (const double x,const double y)=0;
        double getXrange() const{return xrange;} 
        double getYrange() const{return yrange;} 
    protected:
        double xrange;
        double yrange;
};

81 名前:デフォルトの名無しさん :2006/12/03(日) 22:24:00
>>78
getYrange() に const 付け忘れてんだろ。

82 名前:デフォルトの名無しさん :2006/12/03(日) 22:25:31
>>80
isInside() と、それをオーバーライドするクラスでの宣言全部に const が必要。
片方だけ付けるとオーバーライドとみなされない。

83 名前:デフォルトの名無しさん :2006/12/03(日) 22:34:42
>>82
ありがとうございます。うまくいきました。

各クラス1個1個const付けつつコンパイルしてたので失敗していました。。。

84 名前:デフォルトの名無しさん :2006/12/03(日) 23:22:00
いかにも学校の宿題っぽいソース見せられるとなんか和むな

85 名前:デフォルトの名無しさん :2006/12/04(月) 10:56:18
旦~

86 名前:デフォルトの名無しさん :2006/12/04(月) 10:56:54
すまぬ、誤爆したorz

87 名前:デフォルトの名無しさん :2006/12/04(月) 20:00:54
1つのクラスで10Kラインてのは、
やっぱ詰め込みすぎですかね?

ソース整理してくれって言われてて
とりあえずライン数集計したんだけど。

88 名前:デフォルトの名無しさん :2006/12/04(月) 20:16:42
よっぽど低レベルな処理でもしてるんでなければ多すぎだろ、それは。

89 名前:デフォルトの名無しさん :2006/12/04(月) 20:48:38
マ板の「この会社やめようと思ったソースコード」に出てくる領域じゃないかな・・・。

90 名前:87 :2006/12/04(月) 21:32:55
>>88、89

うーん、詳しくはいえないんだけど、
数値計算系の業務用プログラムなんだ。
入ったばっかで何やってるかわからないから、
10Kが妥当かどうかも判断つかないよ。

91 名前:デフォルトの名無しさん :2006/12/04(月) 21:41:50
数値計算系ならあり得るかも・・・


92 名前:デフォルトの名無しさん :2006/12/04(月) 21:43:01
まぁソース分割だけじゃなく色んな方面から考えないとなぁ

93 名前:デフォルトの名無しさん :2006/12/04(月) 21:51:36
メンバ変数とか1つのクラスに数十個あるよ
クラス同士の結合も相当強いし。。
しかし、数値計算に必要といわれればそれまでwww

94 名前:デフォルトの名無しさん :2006/12/04(月) 23:38:50
そればっかりはアルゴリズム勉強するとかしないと判断不能だからなぁ……。
困るねそういうの。

95 名前:デフォルトの名無しさん :2006/12/05(火) 00:15:35
あと、時々メモリリークを起こすって言うから調べてるんだけど
(どうもconst変数の値がいつのまにか変わっちゃうらしい)
全クラスでコピーコンストラクタとコピー代入演算子が書かれてないんだ。
(デストラクタも宣言しただけ)
このあたりって、関係あるかな???

96 名前:デフォルトの名無しさん :2006/12/05(火) 00:23:58
単にconst_castしちゃってるとかじゃないよね?

97 名前:デフォルトの名無しさん :2006/12/05(火) 00:32:42
>>96
あ、それもありうるかも
なんせソースが長いからどっかでやってるかな。。
明日調べてみます。ありがd!!!


98 名前:デフォルトの名無しさん :2006/12/05(火) 00:39:58
getter/setterについての質問です。

多くのgetter/setterはmember変数に対しての操作になると思います。
例えば、int GetX() constとvoid SetX(int)です。

で、逆に、member変数に対して操作しないような関数は、
GetやSetっていう名前をつけるのは避けたほうがいいんでしょうか。

今制御のprogram書いてるんですけど、
制御する機器の状態(シリアル接続)を問い合わせるのに、
GetMode()とかやってどういうモードで稼働しているかとか、
そういう関数にGetを使うのは慣習違反ではないですか?

99 名前:デフォルトの名無しさん :2006/12/05(火) 00:46:11
俺はなんかの状態を取り出すものは全部getってつけてる。
むしろメンバ変数かそうでないかでgetってつけるかつけないか
決めちゃったらカプセル化という意味でも変だと思う

100 名前:デフォルトの名無しさん :2006/12/05(火) 02:40:39
>>98
そのクラスが
 外からみてどう振舞って欲しいか、どんな操作があればよいか
というのと、
 メンバ変数としてどう持つか
というのは分けて考える。
そうすれば疑問は沸かない。

広い意味でのインターフェースと実装の分離、だよ。

101 名前:デフォルトの名無しさん :2006/12/05(火) 07:14:01
class A{
public:
  A(){};
  void F(){ ... };
};
というクラスを作り、
A a1;
A a2();
とインスタンス化したのですが、
a2の方は「プロトタイプされている関数が呼び出されませんでした」と警告が出ました
続けて、
A a2();
a2.F();
とやると、Fが定義されてないとなってコンパイルエラーがでました。
以前、コンストラクタで()をつけても、つけなくても同じと聞いたのですが、やはり違うんですか?
VisualStudio.2003を使ってます

102 名前:デフォルトの名無しさん :2006/12/05(火) 07:18:47
>>101
それだと「引数を受け取らず、Aを返す関数の宣言」と解釈されてしまってる。

103 名前:デフォルトの名無しさん :2006/12/05(火) 10:17:03
>>98
標準ライブラリに習って、メンバの状態取得には何もつけない。

[オブジェクト].名詞();    // げった
[オブジェクト].動詞(値) // せった。 若しくは [オブジェクト].set_名詞(値)

でアクセス。たとえば mode なら

int md = object.mode();
object.change_mode(md);

サイズなら、

size_t sz = object.size();
object.resize(sz);

みたいな。


104 名前:デフォルトの名無しさん :2006/12/05(火) 10:20:26
type member() const;
void member(type value);
でいいじゃん。

105 名前:デフォルトの名無しさん :2006/12/05(火) 13:49:47
>>104
bind に渡すときとか面倒なうえに可読性もガタ落ちするんで、やめてください。

106 名前:98 :2006/12/05(火) 14:47:40
レスありがとうございます。
特にこれといった流儀はなさそうですが、
>>99-100
そのclassを使う側からしてみれば、
member変数なのかも分からないですもんね。
そうすると、member変数が持つ状態のか、
制御する装置自身が持っている状態なのか、
気にする必要はないような気がします。

>>103
こっちでも確かにそうだなーと思ってしまう。

どっちにするか未定ですが、参考になりました。

>>104
きもす。

107 名前:デフォルトの名無しさん :2006/12/05(火) 16:16:10
new/deleteに関する質問です。

newで動的に領域を確保しているのですが、
この領域をいくつものクラス間で利用しているため、
どのクラスでdeleteすればいいかが分かりません。
最後に使用しているクラスを判断するみたいな関数とか
ありませんでしょうか?

108 名前:デフォルトの名無しさん :2006/12/05(火) 16:19:23
>>107
その領域を使用しているクラスを表すカウンタを作る

109 名前:デフォルトの名無しさん :2006/12/05(火) 16:21:03
クラスとインスタンスの区別はつけよーぜ。
ってのはともかく、スマートポインタとかリファレンスカウントとかって言葉で調べろ。

110 名前:デフォルトの名無しさん :2006/12/05(火) 16:21:30
>>108
その手があったか!!
サンクス

111 名前:デフォルトの名無しさん :2006/12/05(火) 16:25:41
>>109
すみません、まだC++始めたばっかりで
理解できていない部分が多くて(´Д⊂グスン
精進しますm(_ _)m

112 名前:デフォルトの名無しさん :2006/12/05(火) 17:40:40
Stroustrupへのインタビュー

ttp://www.techreview.com/InfoTech/17831/

113 名前:デフォルトの名無しさん :2006/12/05(火) 17:46:23
そのネタもう秋田

114 名前:デフォルトの名無しさん :2006/12/05(火) 17:57:00
毎年いるなー
「このネタ面白いでしょでしょ?」なバカが。
氏ねばいいのに

115 名前:デフォルトの名無しさん :2006/12/05(火) 18:38:42
細かくあちこち覗いてると、毎月ペースで出会うw

116 名前:デフォルトの名無しさん :2006/12/05(火) 19:45:17
io.h, stdio.h, fstream
とありますが、ファイル入出力で一番処理効率がいいのって
fopen系ですよね?
fstream系のオブジェクトで数メガのファイルを開くとどうもモッサリします…

普通にこんな感じなんですが。

ifstream in("file", ios::binary);
in.seekg(ios::end);
int size = in.tellg();
in.seekg(ios::beg);
char pbuf = new char[size];
in.read(pbuf, size);
in.close();
delete []pbuf;

117 名前:デフォルトの名無しさん :2006/12/05(火) 20:04:10
>>116
実装による

118 名前:デフォルトの名無しさん :2006/12/05(火) 20:07:31
>>117
そうですよねぇ…
VC++6.0なんですけど、>>116コードがかなりモッサリしてたんで…

119 名前:デフォルトの名無しさん :2006/12/05(火) 20:24:10
1MB以上1GBぐらいまでのファイルの読み込みなら素直にAPI使ってメモリマップトファイルで。

120 名前:デフォルトの名無しさん :2006/12/05(火) 22:41:13
>>113-114
>>112はいつものネタじゃないぞw
ttp://slashdot.jp/~El-ahrairah/journal/384164
日本語訳

121 名前:デフォルトの名無しさん :2006/12/05(火) 22:57:06
昔Cの読んだ本で、
「プログラミング言語C」 難しい、分からない
「初めてのC」 全然分からない
「新・詳説C言語」 分かりやすくてサイコー
こんな感じだったんだけど。

「新・詳説C言語」のようなC++の解説サイト(日本語限定)、なかなか見つからない。
色々ぐぐってみて、javaでは今のところ、
Javaの道(Java入門・リファレンス)
ttp://www.javaroad.jp/
が一番イメージに近いんだけど。

122 名前:デフォルトの名無しさん :2006/12/05(火) 22:59:56
>>121
〜だけど。〜だけど。
何が言いたいのか分からない。


123 名前:デフォルトの名無しさん :2006/12/05(火) 23:22:44
とりあえず英語勉強しろと言っとこう。
絶対必要になるし。

124 名前:デフォルトの名無しさん :2006/12/06(水) 04:13:20
2次元配列を使った3×3行列の転置行列って、どうやったらいいですかねぇ?

125 名前:デフォルトの名無しさん :2006/12/06(水) 04:16:00
行と列を入れ替えればいいと思うよ

126 名前:デフォルトの名無しさん :2006/12/06(水) 13:37:44
関数の引数として一時オブジェクトを渡すとなぜコピーが発生しないのでしょうか?
例えば、これ。
class A;
void Func(A obj);
int main() {
Func( A() ); //コンストラクタを直接呼んで一時オブジェクトを生成
return 0;
}
後、一時オブジェクトはスタックに作られるんでしょうか?

127 名前:デフォルトの名無しさん :2006/12/06(水) 13:45:08
>>126
必ずコピーが発生しないわけではない。
詳細は覚えてないけど、ダイレクトで渡してもいいよっていうルールがあるだけ。
場合によってはレジスタ上にしか存在しないなんて例外もあるかもしれんが、
基本的に一時オブジェクトはスタック上に作られる。

128 名前:デフォルトの名無しさん :2006/12/06(水) 13:59:28
最適化とかが進むと、クラスの実体自体が機械語レベルでは消えてたりとかな。

129 名前:126 :2006/12/06(水) 14:18:24
一時オブジェクトは、スタックに作られるというのは分かりました。
>必ずコピーが発生しないわけではない。
ということは、一時オブジェクトからさらに引数のために
スタックにコピーされることもあるってことですよね。
そうなると、引数にするものが存在するのにコピーして無駄
な作業してるじゃないですか。

130 名前:デフォルトの名無しさん :2006/12/06(水) 15:54:14
>>129
そして>>127へ戻る。
最適化で無駄なコピーを除去してよいという規則がある。

131 名前:126 :2006/12/06(水) 16:32:33
なんかもやもや感がありますが、そういう規則が適用される場合があると考えることにします。
回答ありがとうございました。

132 名前:デフォルトの名無しさん :2006/12/06(水) 21:18:33
一時オブジェクトの省略はしても良いし、しなくても良い。
どちらにするかの判断はコンパイラに任されている。

133 名前:デフォルトの名無しさん :2006/12/06(水) 21:45:30
引数も戻り値も一時変数もローカル変数も全部スタックの上の話ってことさ

134 名前:126 :2006/12/06(水) 22:30:35
なるほど、コンパイラによるんですね。結構すっきりしてきました。
でも、テストコードを作るために直接コンストラクタを呼んで一時オブジェクト使えばコードを書く量が減るから
いいなぁ〜って思ったけど、あまりやらない方がいいですね。

135 名前:デフォルトの名無しさん :2006/12/06(水) 22:51:45
コードの量は減らせるなら減らしたほうがいい
わかりやすさを損ねない限り

136 名前:デフォルトの名無しさん :2006/12/06(水) 23:04:11
そもそもクラスを引数にするなら普通const参照にするだろ。

137 名前:デフォルトの名無しさん :2006/12/07(木) 10:16:50
>>134
その辺は次の標準ではやり方が変わる可能性が高い。
rvalue reference, move semantics辺りで。

138 名前:デフォルトの名無しさん :2006/12/07(木) 11:04:59
聞いてない

139 名前:デフォルトの名無しさん :2006/12/10(日) 13:37:08
拡張子 cppは見直すべきじゃないか
http://www002.upp.so-net.ne.jp/mif/cpp/


140 名前:デフォルトの名無しさん :2006/12/10(日) 14:14:28
>>139
それでなくても C PreProcessor との曖昧さが問題だろ。

141 名前:デフォルトの名無しさん :2006/12/10(日) 17:29:51
namespace A
{
int a()
{
retrun 0;
}
}
using A::a();
int main()
{
a();
retrun 0;
}

こう書いてるノートがあるんですが、
これって間違いですよね。
正しくは
using A::a;
じゃないんですか?

142 名前:デフォルトの名無しさん :2006/12/10(日) 17:42:27
>>141 コンパイルしてから聞け。

143 名前:デフォルトの名無しさん :2006/12/10(日) 17:47:50
>>142
using A::a();
でコンパイルできなくて
A::a;
だとできたので聞いたんです。

144 名前:デフォルトの名無しさん :2006/12/10(日) 17:52:30
そこまでやって自分で結論出せないなら首吊って氏ね

145 名前:デフォルトの名無しさん :2006/12/10(日) 17:54:32
>>143
オマエのコンパイラは retrun がコンパイルできるんだな。それ C++ じゃないよ。

146 名前:デフォルトの名無しさん :2006/12/10(日) 17:58:52
>>145
return の間違いだろ。スルーしとけばよくね?

147 名前:デフォルトの名無しさん :2006/12/10(日) 18:00:02
>>145
return の間違いです。

148 名前:デフォルトの名無しさん :2006/12/10(日) 18:12:06
>>144
いや、誉めてもらいたいんだよきっと

149 名前:デフォルトの名無しさん :2006/12/10(日) 18:34:12
すみません、C++がほとんど分からないバカですが、
分からないにも関わらず、C++の仕事やんなきゃいけなくって、
困ってます。助けてください。(ほんとにわけわかってません)

[質問]
  MFCでつくったDLLって、MFCでつくったEXEからしか
  呼べないんでしょうか? MFC以外のC++のEXEから呼ぶ
  方法があれば、教えて下さい。

150 名前:デフォルトの名無しさん :2006/12/10(日) 18:39:40
>>149
スレ違い。

バカはプログラムするな。分からないと自覚してるんなら仕事は断れ。

151 名前:デフォルトの名無しさん :2006/12/10(日) 18:41:09
>>149
■MFC相談室 mfc17d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1164073111/

152 名前:デフォルトの名無しさん :2006/12/10(日) 18:49:01
質問です。
#include <iostream>
using namespace std;

namespace x
{
a(int,int);
int i;
int j;
int k;
}

int x::a(int k, int j)
{
cout << k+j << endl;
return 0;
}

int main()
{
return 0;
}

これがコンパイルできるのですが、
関数宣言したとき、戻り値書かなかった場合、自動的にintになるんですか。

153 名前:デフォルトの名無しさん :2006/12/10(日) 18:54:58
>>152
暗黙の宣言でググれ。
Cやその前身のBの頃の名残り。

154 名前:デフォルトの名無しさん :2006/12/10(日) 18:56:50
質問です
シーはネトゲに向いてますか?
どんなネトゲに使われてますか?

将来ネトゲ作るために、少しふれておきたいです
どれがいいのか悩んでます

155 名前:デフォルトの名無しさん :2006/12/10(日) 18:57:04
>>149
もしお客だったとして、こんな奴の作ったもの使いたくない

156 名前:デフォルトの名無しさん :2006/12/10(日) 18:57:44
>>153 ありがとうございました。

157 名前:デフォルトの名無しさん :2006/12/10(日) 19:11:00
C言語の構造体

typedef struct tree{
int value;
..any
struct tree *next;
struct tree *child;
struct tree *parent;
struct tree *prev;
}Tree;

このようなデータ構造をC++側でラップする場合みんなどうやってラップしますか?

158 名前:デフォルトの名無しさん :2006/12/10(日) 19:17:57
>>152
コンパイラ何使ってる? C++ では暗黙の型指定は無くなってるはず。

159 名前:デフォルトの名無しさん :2006/12/10(日) 19:18:43
>>157
ラップする目的がわからないと、何も決まらない。

160 名前:デフォルトの名無しさん :2006/12/10(日) 19:29:03
>>159
AIXとHPでほぼ同じ構造体を持つライブラリがあります。
わざわざ呼び出すのに、ライブラリに依存して呼び出したくないので
ラップして、隠蔽したいなぁと考えています。

161 名前:デフォルトの名無しさん :2006/12/10(日) 19:45:57
>>160
共通のインターフェースを純粋仮想関数としたクラスを書いて、
それぞれの実装(派生クラス)にラップする構造体を持たせる
って感じが基本かなぁ。

162 名前:デフォルトの名無しさん :2006/12/10(日) 19:46:05
>>158
Borland C++ 5.5.1
拡張子で判断してくれてるんだと思ってたけど、
なんかオプション必要?

163 名前:デフォルトの名無しさん :2006/12/10(日) 19:48:39
>>162
namespace でエラーが出ないなら、 C++ としてコンパイルしてるはず。
どうせ C の実装をそのまま使いまわしちゃってるんだろう。
ここはソースを直すべき。

164 名前:デフォルトの名無しさん :2006/12/10(日) 20:16:52
>>163
どうも。

165 名前:デフォルトの名無しさん :2006/12/10(日) 21:40:38
Exceptional C++ Style で、コピーの生成を省略できる(RVO)理由として
「標準準拠のプログラムと区別がつかない限り、コンパイラは標準の
技術的要求と異なることをしても良い」
とあるのですが、意味がよく分かりません。
例えばコンストラクタで画面に文字を出力しているときなどでは、
コピーが省略されると結果が変わってくると思うのですが

166 名前:デフォルトの名無しさん :2006/12/10(日) 21:53:46
RVOは規格にやってよいと書かれているはず。

167 名前:デフォルトの名無しさん :2006/12/10(日) 22:01:27
>165
第何項の話?

168 名前:デフォルトの名無しさん :2006/12/10(日) 22:02:57
>>166
http://cpptips.hyperformix.com/cpptips/ret_val_opt.txt

>>165
その辺りの非効率改善と意味論的錯綜は、
RVOで何とか誤魔化そうとしたけど、誤魔化しきれなかったので、
次の規格で、move semantics, rvalue referenceってのを入れようとしてます。

A Brief Introduction to Rvalue References
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html

169 名前:デフォルトの名無しさん :2006/12/10(日) 22:03:57
>>167
書籍のことを言っているのなら187P

170 名前:デフォルトの名無しさん :2006/12/10(日) 22:06:32
>>167
12.8.15じゃん。
12.8 Copying Class Objects

171 名前:デフォルトの名無しさん :2006/12/10(日) 22:07:37
>>168
要するにいい加減になってるということですか?
(rvalue referenceは是非とも入ってほしいですね)

172 名前:170 :2006/12/10(日) 22:07:44
ぐは!>>167を読み違えてるよ、俺。

173 名前:デフォルトの名無しさん :2006/12/10(日) 22:10:39
>>171
まああなたの>>165の疑問は正しい感覚であるということになると思います。
良く考えて読んでいる証拠かと。
12.8.15も読んどいてください。JIS規格はただで読めるので。

174 名前:デフォルトの名無しさん :2006/12/10(日) 22:25:20
>169
ごめんなさい.英語版しか持ってないんです…….

>172
曖昧な質問ですいません.書籍の項目番号を聞いてるつもりでした.

>165
上のレスで挙げられた規格の項目 12.8/15 にありますけれど
"even if the copy constructor and/or destructor for the object have side effects."
でも [N]RVO は許されていて
>例えばコンストラクタで画面に文字を出力しているとき
では RVO が機能しているかどうかで画面出力が変化します.
逆に,画面出力の回数で RVO が効いているかどうかを確認することができます.

ただし constructor/destructor に副作用があるかどうかで,コンパイラの
RVO に関する判断が変わる可能性も否定できませんけれど.

175 名前:デフォルトの名無しさん :2006/12/10(日) 22:30:33
>>174
私も書いた後でそんな気がしてましたw
「最適化と効率」の「24.constによる最適化」という項の、
Guru質問3の解説にあります

176 名前:デフォルトの名無しさん :2006/12/10(日) 22:38:42
>175
今,該当の項目読みましたけれど,ここは RVO とは直接の関係が無いと思います.
なので書いてあるとおり, z のコピーコンストラクタで副作用が発生するなら
copy を省略することはできないです (ここが RVO との差異).

177 名前:デフォルトの名無しさん :2006/12/11(月) 12:41:05
質問です。
関数の引数に渡されたインスタンスが、
ある複数のクラスを継承しているかをRTTIも用いずに判別する方法はあるでしょうか?

その判別が可能であれば、その後に各クラスのインタフェースでメソッドを呼びたいのです。
今のところ、苦肉の策として
class Hoge : public A , B;というクラスの場合、
void Func(A a,B b) のように含まれる型分の引数を増やした関数を作り、
全てに同じインスタンスオブジェクトを指定してもらうようにしています。

178 名前:デフォルトの名無しさん :2006/12/11(月) 13:11:54
コンパイル時ならtemplateでどうにでもなるんだけどなぁ。
MFCだとRUNTIME_CLASSなんてのがあったね。

179 名前:デフォルトの名無しさん :2006/12/11(月) 13:13:32
>>177
「複数のクラス」が全部空のインターフェースクラスなら、
単純にまとめたインターフェースクラスを取ればいいんだろうなぁ。
現状で実装が混ざってるんなら、そいつら切り離したら良いんじゃない?

あるいは、
class AB
{
virtual A& A() = 0;
virtual B& B() = 0;
};

class Hoge : public A, B, AB
にして
void Func(AB&);
とか。

180 名前:デフォルトの名無しさん :2006/12/11(月) 13:42:36
class A{
B b;
};

class B{
A a;
};

としたいんですが、やはりコンパイルエラーです。
どうすれば良いんでしょうか。

181 名前:デフォルトの名無しさん :2006/12/11(月) 13:57:31
>>180
それ無限入れ子になるから無理

182 名前:デフォルトの名無しさん :2006/12/11(月) 14:01:42
class A{
B*b;
};

class B{
A*a;
};

実はこれがしたいのを適当に省略してしまいました。
voidで我慢しないといけないんでしょうか。

183 名前:デフォルトの名無しさん :2006/12/11(月) 14:04:29
class B;
class A{
B*b;
};

class B{
A*a;
};

184 名前:デフォルトの名無しさん :2006/12/11(月) 14:05:01
arigatougozaimasita;

185 名前:デフォルトの名無しさん :2006/12/11(月) 21:29:28
>>177

class Q { public: virtual bool QueryClass( uintptr_t cid, void * & pSelf ) = 0; }

template<typename T> uintptr_t CLSID()
{
 static T * dummy = 0;
 return reinterpret_cast<uintptr_t>(&dummy);
}

class A { public: static uintptr_t CID() { return CLSID<A>() } ... };
class B { public: static uintptr_t CID() { return CLSID<B>(); } ... };

class AB : public A, public B, public Q {
 public:
  static int CID() { return CLSID<AB>(); }
  bool QueryClass( uintptr_t cid, void * & pSelf ){
   pSelf = 0;
   if( cid == A::CID() || cid == B::CID() || cid == AB::CID() )
    pSelf = this;
   return pSelf != 0;
  }
};

186 名前:デフォルトの名無しさん :2006/12/11(月) 22:47:22
感動した
流石template

187 名前:デフォルトの名無しさん :2006/12/12(火) 01:21:12
プログラムの事じゃないからここで聞いちゃいけないかもしれないけど・・・

小さい頃からプログラマーになりたくて中学校のときに中学生なりに勉強はしてたけど
普通の勉強が嫌いでプログラムの勉強ばっかりしてたら工業高校にいけなくて結局普通高に行った
学校は普通の授業ばかりでやる気も出ずに中退
プログラマーの夢も諦めてしばらくNEETやってたけどやっぱり親に頼りっきりってのも問題だと思って
もう一度プログラムの勉強始めてみた

でも中卒でプログラマーやPC関連の職に就けるとは思えない・・・
もし望みがまったく無いなら今のうちに諦めて別の職業を探そうかなと・・・

今から勉強をがんばったとして望みはありますか?
大検も一応受けようと思ってます

188 名前:デフォルトの名無しさん :2006/12/12(火) 01:26:26
プログラムの勉強ばっかりしてたら
数学も英語も必要になるのでどうにかなっただろう

君はバカなのだ
逆説的だが君はプログラマに向いている
望みはある

189 名前:デフォルトの名無しさん :2006/12/12(火) 01:52:26
>>188
数学も英語も一応使う部分は勉強して理解してたけど
その時の授業で使われないから意味が無かった・・・
好きなことに関しては勉強意欲もあるし長時間できるけど
国語や社会などの勉強は10分も出来ない・・・やる気が出ない・・・極端すぎた

就職する望みがあるならこのまま勉強続けたいと思います
とりあえずCとJavaかな・・・

ありがとうございましたw

190 名前:デフォルトの名無しさん :2006/12/12(火) 02:14:22
一気にスレのレベルが上がったなw

191 名前:デフォルトの名無しさん :2006/12/12(火) 02:27:08
大学入試でも私立なら国社はいらないし気にすることないんじゃないの

192 名前:デフォルトの名無しさん :2006/12/12(火) 02:35:30
>>187
正攻法で行っても、実力を評価される前に「足切り」されるのがオチ。
就職希望なら自分の実力を相手にはっきり示せる武器をまずは用意しろ、話はそれからだ。
あと、なにも就職することだけが職業プログラマへの道ではない。

193 名前:デフォルトの名無しさん :2006/12/12(火) 02:46:57
>>185
QueryClass の結果は戻り値使えばいいんじゃないの?
CLSID にある dummy の型は char const で十分だね。
uintptr_t を使ってる意味が分からない。 void const* を typedef すれば十分じゃないの?

とか、いろいろ突っ込みどころがあって気になったけど、面倒になったからあとはいいや。

>>186
これ、たぶん無駄な記述が多いから真似しないほうがいいよ。

194 名前:デフォルトの名無しさん :2006/12/12(火) 07:32:29
auto_ptr<>についての質問です。

動的に3次元配列のメモリをauto_ptr<>を使って確保したんですけど、
どうしたらいいのか、わかりません。
どうしたらいいんでしょうか?

195 名前:デフォルトの名無しさん :2006/12/12(火) 07:44:40
>>194
確保したんだったら、利用すれば?
利用するために確保したんでしょ?

196 名前:デフォルトの名無しさん :2006/12/12(火) 07:51:22
そもそも配列の保持にauto_ptrを使ってはいけない。

197 名前:デフォルトの名無しさん :2006/12/12(火) 09:32:34
>>194
boostにmulti_arrayというのがある
boost::multi_array<int, 3> ary(boost::extents[10][20][30]);
ary[0][1][2] = 123;
こんな感じで使える

198 名前:デフォルトの名無しさん :2006/12/12(火) 11:47:04
クラスのメンバに参照を持ちたいんですけど、ポインタで我慢しないといけないんでしょうか。

199 名前:デフォルトの名無しさん :2006/12/12(火) 11:52:38
>>199
我慢せずにどうぞ


200 名前:デフォルトの名無しさん :2006/12/12(火) 12:23:14
template<typename _Ty>みたいな使い方の利点はわかるんだけど
template<int _I>とかって存在理由がよくわからない。
テンプレートクラスなんかでもメンバ変数かなんかに保持してちゃだめなのかな。

201 名前:デフォルトの名無しさん :2006/12/12(火) 12:58:32
存在理由というか、そもそも使い方が分かってないので、
boost::lambdaでも読んで勉強してはどうか?

202 名前:デフォルトの名無しさん :2006/12/12(火) 13:05:48
>>200
配列の要素数のような定数式が要求される部分でもパラメータ化できる。

203 名前:デフォルトの名無しさん :2006/12/12(火) 16:43:17
>>200
引数に渡された配列の要素数がゲットできる。

204 名前:デフォルトの名無しさん :2006/12/12(火) 17:18:16
フィボナッチ数を計算できるw

205 名前:デフォルトの名無しさん :2006/12/12(火) 18:15:24
>>193
めんどくさがらずに書いていただきたい。

206 名前:デフォルトの名無しさん :2006/12/12(火) 18:16:05
上げてすまん。

207 名前:デフォルトの名無しさん :2006/12/12(火) 18:26:00
>>200
コンパイラに無茶な仕事をさせ、コンパイル時間を大幅に引き伸ばすことができる。

208 名前:デフォルトの名無しさん :2006/12/12(火) 21:30:15
>>200
C++学習者に意味のわからない奇妙な構文を浴びせ、
混乱に陥れる事が出来る。

209 名前:デフォルトの名無しさん :2006/12/13(水) 00:44:04
>>205 (>>185)
じゃ、書いてみる。

定型になっている CID() の定義を繰り返すのは無駄だろ。
QueryClass() の実装と継承関係に関連が無いのでまったく信用できない。

というわけで、そもそも >>177 への回答になっていなかったわけだ。
どうでもいいぜ。

210 名前:デフォルトの名無しさん :2006/12/13(水) 02:15:49
ここで質問に答えてる人に聞きたいんだけど、
何か問題解くためのソースをゼロから書きたいって思ったとき
完成するまでどのくらいの時間かかってんの?
たとえば、どんな問題でもいいけど、ソートとか。

やっぱり頭の中で簡単にアルゴリズムからソース生成できるのかな。


211 名前:194 :2006/12/13(水) 02:59:06
保持するのにuato_ptr<>を使うのは間違いなんですか。
わかりました!
ありがとうございました!

boostですか。初めて見ましたw
これからそれについて勉強してみます。
ありがとうございました!

212 名前:デフォルトの名無しさん :2006/12/13(水) 10:50:10
テンプレートによるスマートポインタを作っているのですが、
void型をサポート可能にしてしまうと、operator*()が実装出来ずに困っています。
error C2182: '*' : 'void' 型が不適切に使用されています。
どのように解決すればよいでしょうか?ご教授下さい。

213 名前:デフォルトの名無しさん :2006/12/13(水) 11:11:53
特殊化

214 名前:デフォルトの名無しさん :2006/12/13(水) 12:14:07
>>213
なるほと、こんなときの特殊化でしたね。
ありがとうございました。

215 名前:デフォルトの名無しさん :2006/12/13(水) 15:50:23
>>210
ソートだと、STLとかのライブラリに頼り切ってるから
全部自分で書こうとすると悩むかも。クイックソートってどうやるんだっけ?とか。

簡単な問題なら、大まかなアルゴリズムがパッと思い浮かぶ。
で、もっとスマートにできないかとか、これで合ってるのかとかちょっと考える。
アルゴリズムが固まればコードに落とすのは簡単。その通りに書けばいいだけだし。

216 名前:デフォルトの名無しさん :2006/12/13(水) 17:10:32
>>210
スレ違いです。

217 名前:デフォルトの名無しさん :2006/12/13(水) 17:54:54
すみません。テンプレートで分からないことがあるのですが、

template<typename T> int function(vector<T> vec)
{
 ・・・
 return 0;
}
int main(){
 vector<int> vec;
 function<int>(vec);
 return 0;
}
このような感じだと
「function(class vector<int,alloc<int>>)が定義されていない」
といった感じのエラーが出てしまいます。

型がまだわからないvectorを引数に取る関数を定義するには
どうすればいいのでしょうか?

218 名前:デフォルトの名無しさん :2006/12/13(水) 18:15:02
>>217
コンパイルできたけど?
includeかnamespace忘れてない?

219 名前:デフォルトの名無しさん :2006/12/13(水) 19:11:37
あれ、、。
ちなみにコンパイラは何でしょう?

#include <vector>
using namespace std;
と冒頭で打ってるので大丈夫だと思うのですが。

220 名前:デフォルトの名無しさん :2006/12/13(水) 19:16:43
質問です
LinuxでC++を使う場合、開発環境はEcrips一択でしょうか?
他に便利なものがあれば教えてください

221 名前:デフォルトの名無しさん :2006/12/13(水) 19:17:05
>>219
gcc,vc,bcc
エラーがでる最小限のソース晒してくれ


222 名前:219 :2006/12/13(水) 19:19:58
>>221
ちょっと時間ください。
大学が閉まりそうなので時間かかってしまうかもしれませぬ。

223 名前:219 :2006/12/13(水) 20:11:00
思っていたソースとだいぶ違っていました。。
#include <vector>
using namespace std;
// default
template<typename T>
int func(T data);
// int
template<>
int func<int*>(int* data);
// vector
template<typename A>
int func<vector<A>*>(vector<A>* data);

// int
int func<int*>(int* data){
return 0;
}
// vector
template<typename A>
int func(vector<A>* data){
return 0;
}

int main(){
vector<int> ivec;
func(&ivec);
vector<float> fvec;
func(&fvec);
int i;
func(&i);
return 0;
}

224 名前:219 :2006/12/13(水) 20:12:01
これだと、
test.cpp(12) : error C2768: 'func' : 明示的なテンプレート引数を使用することはできません。
となってしまいます。
型未定ベクタの特殊化をしたいのでが、うまい方法が分からないです。
何かいい方法はありませんでしょうか?

225 名前:デフォルトの名無しさん :2006/12/13(水) 20:21:41
関数の特殊化は無理

226 名前:デフォルトの名無しさん :2006/12/13(水) 20:28:38
>>220
誘導
http://pc8.2ch.net/test/read.cgi/linux/1039282447/


227 名前:デフォルトの名無しさん :2006/12/13(水) 20:35:57
>>224
templateの特殊化はよく知らないのだけど、コンパイルできるように変えてみた
ただコンパイル通るようにしただけで、たぶん求めてるものと違うと思う

#include <vector>
using namespace std;
// default
template<typename T>
int func(T data);
// int
template<>
int func<int*>(int* data){
return 0;
}
// vector
template<typename A>
int func(vector<A>* data){
return 0;
}

int main(){
vector<int> ivec;
func(&ivec);
vector<float> fvec;
func(&fvec);
int i;
func(&i);
return 0;
}

228 名前:219 :2006/12/13(水) 20:57:12
特殊化できないのですか…むしろする必要がない?きがしてきました。

それでコンパイル通りました。そんな感じで色々試してみます。
携帯からなのでアンカー省略しますが、みなさんありがとうございました。

229 名前:デフォルトの名無しさん :2006/12/13(水) 21:08:56
人格プログラムって作れるんですか?

230 名前:デフォルトの名無しさん :2006/12/13(水) 21:11:14
C++で?

231 名前:デフォルトの名無しさん :2006/12/13(水) 21:14:51
難しいことはよくわかんないです。プログラム自体どんなものかよく分からないし・・・・
ここの話題とは外れているんですけど・・・

232 名前:デフォルトの名無しさん :2006/12/13(水) 21:21:21
>>231
ここでやれ
http://pc8.2ch.net/test/read.cgi/tech/1160751859/

233 名前:デフォルトの名無しさん :2006/12/13(水) 21:23:57
教えていただいてありがとうございます


234 名前:デフォルトの名無しさん :2006/12/13(水) 21:53:36
1GBくらいのメモリを一気に必要とするプログラムを作ってるんですが。。。
物理メモリ1GBのマシンで走らせると、
スワップで死ぬほど遅くなります。。
スワップ走らせないで、物理メモリのみを確保するにはどうしたらいいんですか?
WinXPです

235 名前:デフォルトの名無しさん :2006/12/13(水) 21:55:44
>>234
XPは、カーネルが、100MB以上のメモリを必要とするが、どこから1GBのメモリは湧き出てくるのかね?

236 名前:デフォルトの名無しさん :2006/12/13(水) 21:56:52
>>234
仮想メモリを切っておく

ってのは冗談としてWin32API使わないと出来ないかも

237 名前:デフォルトの名無しさん :2006/12/13(水) 22:30:02
>>235
会社の共有スペースにメモリが落ちてます

>>236
そうですか。。。すれ違いですみません

238 名前:デフォルトの名無しさん :2006/12/13(水) 22:54:13
絶対にスワップしないと保障できるメモリはAWEで確保できるが、
AWEはあまり使いやすいとは思えない。
大抵の用途ではオーバースペックだし。


そもそもAWEを有効にするには、BOOT.INIを変更する必要があるし。

239 名前:デフォルトの名無しさん :2006/12/13(水) 22:55:08
スレ違いも程ほどに

240 名前:デフォルトの名無しさん :2006/12/13(水) 23:15:58
>>234みたいな糞はともかくとして
PCの知識が不足気味な奴って結構いるよな

241 名前:デフォルトの名無しさん :2006/12/13(水) 23:25:41
むっかーーーーー!!!!!!!!!!!!!!!
ぷりぷり

242 名前:デフォルトの名無しさん :2006/12/13(水) 23:28:12
>>240
クズは死になさい

243 名前:デフォルトの名無しさん :2006/12/13(水) 23:32:01
>>238さん
ありがとうございます。
AWE調べてみます。

>>240さん
糞に糞と言われたくありません。

244 名前:デフォルトの名無しさん :2006/12/13(水) 23:37:19
>>243
うんこ

245 名前:デフォルトの名無しさん :2006/12/13(水) 23:41:08
>>243
( ・∀・)つ三三三三三● ウンコクラエ!!

246 名前:デフォルトの名無しさん :2006/12/13(水) 23:51:10
>>243がウンコもらした

247 名前:デフォルトの名無しさん :2006/12/13(水) 23:51:41
おい、なんか>>243のほうから臭うんだが・・・


248 名前:デフォルトの名無しさん :2006/12/13(水) 23:52:33
>>243
いちいち構うな。

249 名前:デフォルトの名無しさん :2006/12/13(水) 23:57:58
>>243


250 名前:デフォルトの名無しさん :2006/12/13(水) 23:59:00
うんこだけに>>243の人気に嫉妬!(shit)


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