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


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

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

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

2 名前:v(^・^)v :03/09/05 00:51
■過去スレ■
 1 http://mimizun.mine.nu:81/2chlog/tech/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://pc2.2ch.net/tech/kako/1041/10413/1041328679.html
 15 http://pc2.2ch.net/tech/kako/1043/10436/1043605481.html
 16 http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html
 17 http://pc2.2ch.net/tech/kako/1047/10475/1047560042.html
 18 http://pc2.2ch.net/tech/kako/1050/10501/1050177746.html
 19 http://pc2.2ch.net/tech/kako/1052/10526/1052625846.html
 20 http://pc2.2ch.net/tech/kako/1055/10551/1055162298.html
 21 http://pc2.2ch.net/test/read.cgi/tech/1057580107/

3 名前:v(^・^)v :03/09/05 00:52
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[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/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)

4 名前:デフォルトの名無しさん :03/09/05 00:52
おう、乙。でも前スレageたのはよくないね!

5 名前:v(^・^)v :03/09/05 00:53
■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/09/05 00:54
■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]
 http://www.microsoft.com/downloads/details.aspx?FamilyId=9B3A2CA6-3647-4070-9F41-A333C6B9181D&displaylang=ja
[DigitalMars]
 http://www.digitalmars.com/
[OpenWatcom]
 http://www.openwatcom.org/
[Comeau]
 http://www.comeaucomputing.com/
[Intel]
 http://www.intel.com/software/products/compilers/
[Metrowerks]
 http://www.metrowerks.com/mw/default.htm

7 名前:v(^・^)v :03/09/05 01:00
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://user.ecc.u-tokyo.ac.jp/~s31552/wp/boost/
 (日本語) http://www.kmonos.net/alang/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 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://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html

8 名前:v(^・^)v :03/09/05 01:01
■関連スレ■
[【C++】template 統合スレ -- STL/Boost/Loki, etc.]
 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
[【C++】Boost使い集まれ!]
 http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50
[C/C++の宿題やらせてください。]
 http://pc2.2ch.net/test/read.cgi/tech/1058283913/l50
[初心者にVisual C++を教えるスレ]
 http://pc2.2ch.net/test/read.cgi/tech/1056280510/l50
[VisualC++(MFC限定)相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1056584836/l50
[ATL 相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
[C/C++でのWindowsPrograming議論スレ(質問お断り)]
 http://pc2.2ch.net/test/read.cgi/tech/1049790146/l50
[COMの世界を斬る!]
 http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
[managed C++ やろうぜ!!]
 http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50
[C++Builder相談室]
 http://pc2.2ch.net/test/read.cgi/tech/1054280736/l50
[タダで使えるBorland C++]
 http://pc2.2ch.net/test/read.cgi/tech/1054390397/l50
[Code of the Nerds" Digital Mars C/C++]
 http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[GCCについて]
 http://pc2.2ch.net/test/read.cgi/tech/1046179115/l50
[OpenWatcom C++]
 http://pc2.2ch.net/test/read.cgi/tech/1033433728/l50
[タダで最強!フリーC/C++コンパイラ]
 http://pc2.2ch.net/test/read.cgi/tech/1035882599/l50

9 名前:v(^・^)v :03/09/05 01:11
前すれ〜

http://pc2.2ch.net/test/read.cgi/tech/1060361082/

10 名前:デフォルトの名無しさん :03/09/05 01:11
完了〜 連投規制イクナイ!

11 名前:デフォルトの名無しさん :03/09/05 01:15
>>10
ヲ塚レー

12 名前:デフォルトの名無しさん :03/09/05 01:18
v(^・^)v
↑何すか?これ

13 名前:デフォルトの名無しさん :03/09/05 01:28
>>12
Z武の(ry

14 名前:デフォルトの名無しさん :03/09/05 01:28
>>12
にこやかに♥

15 名前:デフォルトの名無しさん :03/09/05 01:36
>>12
そういや以前別の顔文字にしようって案があったような
c(+_+)

16 名前:デフォルトの名無しさん :03/09/05 09:27
c(*p p)

17 名前:16 :03/09/05 09:27
あ、書いてから分かった
>>15はそういう意味か
わいの完敗や

18 名前:デフォルトの名無しさん :03/09/05 10:25
>>1
乙。
でも 2ch の boost スレって、もう無いよね。


19 名前:デフォルトの名無しさん :03/09/05 10:35
VC++7.1、とうとうboostのRegression testsで
PPass100%(warning 0), Fail0%(0)達成か。

20 名前:デフォルトの名無しさん :03/09/05 11:09
>>18
templateスレに統合したんじゃなかったっけ?

21 名前:デフォルトの名無しさん :03/09/05 11:30
typedef struct { int a } hoge_t;

// ソース内
{
hoge_t h;
if( h )
cout << "hit" << endl;
}

のように if( h ) を適応させるには
どうすればいいのでしょうか?
(オーバーロードする演算子は何か?)

現在は
bool operator!=( hoge_t a ); で演算子を定義してますが、
if( h != NULL ) となっています。


22 名前:21 :03/09/05 11:33
ミスを訂正
>現在は
>bool operator!=( hoge_t a ); で演算子を定義してますが、
>if( h != NULL ) となっています。
bool operator!=( hoge_t a, int val );
でした。

23 名前:デフォルトの名無しさん :03/09/05 11:38
>>21
基本はoperator bool();だが、整数への暗黙のキャストを排除したいなら
関数ポインタへのキャスト演算子を使う。

24 名前:21 :03/09/05 11:58
>>23
参考書は 一通り目を通したのですが、operator bool() については
書かれていなかったので、ググってみます。
ありがとうございました。

bool operator!=( hoge_t &a int val ) ← & が抜けてました。
整数の暗黙のキャストですが、
#define NULL 0 を利用しただけで、特にキャストの意図はないです。

25 名前:デフォルトの名無しさん :03/09/05 12:12
>>24
operator boolつーかキャスト演算子だな。
整数型への変換云々つーのはboolへのキャスト演算子が定義されてると
{
 Hoge moge;
 int hage = moge;
}
みたいのなのが通ってしまうつー話。


26 名前:21 :03/09/05 12:28
>>25
なるほど、副作用もあるのですね。
修行が足りてませんでした。
てっきり
bool operator!=( hoge_t &a, int val ) {
if( obj.a == val )
 return false;
return true;
}
まで 見透かされてると思った次第です。

どっちにしろ 話がかみ合ってませんね^^;
もう少し詳しい参考書を購入します。

27 名前:デフォルトの名無しさん :03/09/05 13:42

関数ポインタへのキャスト演算子とブール代数へのキャスト演算子を
定義したクラスだと、operator [] を定義できなくならない?

class ClassA
{
operator FuncPtr() const;
ValueType operator []( int index );
};

ClassA objA;
ClassA::ValueType val = objA[1]; // operator[] が特定できない?





28 名前:27 :03/09/05 13:44
う(汗。ClassA 修正。

class ClassA
{
 ...
public:
 operator FuncPtr() const;
 ValueType operator []( int index );
};

29 名前:デフォルトの名無しさん :03/09/06 12:28
クラスの宣言の中のメンバ関数なんですけど、
inline をつけなくても問題ないですか?


30 名前:デフォルトの名無しさん :03/09/06 12:32
ないです。

31 名前:デフォルトの名無しさん :03/09/06 12:35
>>29
そうですよね。そんな気がしてました。
ありがとうございます。

32 名前:デフォルトの名無しさん :03/09/06 12:35
29→>>30

33 名前:デフォルトの名無しさん :03/09/06 12:36
inline化したくないときはどうすればいいんだろ?

34 名前:デフォルトの名無しさん :03/09/06 12:37
って、普通に宣言すればいいだけか

35 名前:デフォルトの名無しさん :03/09/06 12:46
>>28
publicかprivateかは作用対象の解釈には影響ない。
よって>>27のままでも質問としては成り立っている。

ところで、objA[1]という式の解釈にはどんな候補があると言いたいんだ?
objA.operator[](1)
までなら解るが
objA.operator bool()[1]
objA.operator Funcptr()[1]
はないだろ?

36 名前:デフォルトの名無しさん :03/09/06 12:54
>>28
の質問の意図がサッパリわからん。
そんな変な演算子オーバーライドしたらソース読めなくなるぞ。
しかも[]で返すべきはリファレンスだろ。

37 名前:デフォルトの名無しさん :03/09/06 12:59
> operator [] を定義できなくならない?
こんなの、やってみれば解決だろ。放置一択。

38 名前:デフォルトの名無しさん :03/09/06 13:47
>>36
演算子オーバーライドって何?

39 名前:デフォルトの名無しさん :03/09/06 14:02
便乗で質問です。
operatorってvirtualにできるんですか?

40 名前:デフォルトの名無しさん :03/09/06 14:04
> operatorってvirtualにできるんですか?
こんなの、やってみれば解決だろ。放置一択。

41 名前:誰でも言える :03/09/06 14:07
こんなの、やってみれば解決だろ。放置一択。

42 名前:デフォルトの名無しさん :03/09/06 14:10
こんなの、やってみれば解決だろ。放置一択。


43 名前:デフォルトの名無しさん :03/09/06 15:12
なんで(void*)0;はだめなんだろう

44 名前:デフォルトの名無しさん :03/09/06 15:20
そんなの、やってみれば解決だろ。放置一択。

45 名前:デフォルトの名無しさん :03/09/06 15:21
>>43
C言語プログラマハケーン!

46 名前:デフォルトの名無しさん :03/09/06 15:21
日下部ポインターなんて過去の遺物さ。

47 名前:デフォルトの名無しさん :03/09/06 15:25
>>44
'void *' から 'char *' に変換することはできません。
と出ました
これだけだとわかりません
詳しく教えてください

48 名前:デフォルトの名無しさん :03/09/06 15:27
C++ではvoid*はジェネリックなポインタじゃないのさ。
アブノーマルなポインタなのさ。

49 名前:デフォルトの名無しさん :03/09/06 20:13
>>47
void* vp = 12345;
char* cp = 0;
cp = (char*)vp

50 名前:デフォルトの名無しさん :03/09/06 20:14
>>47
ダウンキャストが暗黙にはできないのと基本的には同じことだ。
そのポインタが指し示す先にchar型オブジェクトがあることを
コンパイラは勝手には仮定しない。

51 名前:デフォルトの名無しさん :03/09/06 21:30
C++の標準関数で、同じ符号か、異符号かを返す関数ありませんか?
関数にするとこんな感じだと思うのですが。

bool func (int a, int b)
{
  return ((a>=0 && b>=0))|| ((a < 0 )&&< (b < 0)) ? true : false;
}

52 名前:デフォルトの名無しさん :03/09/06 21:39
>>51
標準関数は知らないが、
return (a >= 0) == (b >= 0);
でいいのか?

それとも、
return a * b >= 0;
か?


53 名前:デフォルトの名無しさん :03/09/06 21:47
inline bool same_sign(int x,int y){return(x<0)?(y<0):!(y<0);}

54 名前:デフォルトの名無しさん :03/09/06 21:53
引数に0があった場合の結果はどうなればいいんだろう?

55 名前:51 :03/09/06 22:37
>>52-54
ありがとうございます。
関数テンプレートにして使わせていただきます。
0が来た場合は正で処理するつもりです。

56 名前:デフォルトの名無しさん :03/09/06 22:43
>51
最上位ビットが符号ビットで処理系に限って、
(a ^ b) >= 0


57 名前:56 :03/09/06 22:44
条件を変更。 「符号ビットが存在する処理系に限って」
(a ^ b) >= 0


58 名前:デフォルトの名無しさん :03/09/06 23:01
>>57
符号ビットが0のとき>=0を表すという条件も必要だな。

59 名前:デフォルトの名無しさん :03/09/07 00:15
論理XORって
inline bool exclusive_or(bool x,bool y){return x?!y:y;}
こんな関数つくんないとダメ?
演算子だけで綺麗に書ける?

60 名前:デフォルトの名無しさん :03/09/07 00:21
>>59
return x != y;


61 名前:59 :03/09/07 00:27
>>60
それが>>59にくらべて優れたコードを生成するかどうかは結局CPU依存だから、
コンパイラが実装できるように言語仕様に含まれるべきではないかと思います。
 bool operator ^^ (bool,bool);
とか。

62 名前:デフォルトの名無しさん :03/09/07 00:35
>>61
・・・・・・。

63 名前:デフォルトの名無しさん :03/09/07 00:50
>>61
おまい馬鹿だろ?

64 名前:59 :03/09/07 01:09
うぉ?漏れ、なんかヘンなこと逝ってるのか?

65 名前:デフォルトの名無しさん :03/09/07 01:29
x != y; って言語仕様に含まれてないの?

66 名前:デフォルトの名無しさん :03/09/07 01:31
>>64
!=こそがあんたの望む演算子だろうが

67 名前:デフォルトの名無しさん :03/09/07 01:32
(mona == giko) != (sine == wara)

確かにキモいぞ

68 名前:59 :03/09/07 01:44
!=を論理XORの代わりにするには両方をboolにキャストする必要があります。
なので、あんまり綺麗には書けなかったりします。

69 名前:デフォルトの名無しさん :03/09/07 02:06
てか,>>27 に対する結論は結局何だったんすか? コンパイラのバグ?
VC++5.0 でも gcc 3.2 でも問題なかったけど

70 名前:デフォルトの名無しさん :03/09/07 02:10
>>69 >>27の脳がバグってた、と。

71 名前:デフォルトの名無しさん :03/09/07 02:55
>>68
キャストせんでも使える。ちゃんと試してから反論しろよ厨房。
ていうかbool型以外に論理XORなんか適用するなよ。

72 名前:デフォルトの名無しさん :03/09/07 03:01
operatorだの暗黙変換は
主観の産物って知ってた?

73 名前:デフォルトの名無しさん :03/09/07 03:29
>>72
ナニが言いたいのかわからん。てか知らん

74 名前:59 :03/09/07 03:37
>>71
たとえば LessThanComparable の要件では、式 a < b の型は
bool ではなく、"convertible to bool" となっている。
これを != で比較しても論理XORの意味になるとは限らない。

似たような話で、Cのライブラリ関数 isupper を使って
isupper(a) != isupper(b) と書いても
論理XORを実装したことにはならない。

> ていうかbool型以外に論理XORなんか適用するなよ
論理値に比較演算子はよいと申すか?

75 名前:デフォルトの名無しさん :03/09/07 04:35
潔癖性?

76 名前:デフォルトの名無しさん :03/09/07 04:57
>>74
うるせータコ

!!a!=!!b
これでも使ってろ

77 名前:デフォルトの名無しさん :03/09/07 05:03
!a != !bで十分だろ>>76
!isupper(a) != !isupper(b)でも

78 名前:デフォルトの名無しさん :03/09/07 05:12
59が求める論理XORをもつ言語って何があるのかな。

79 名前:デフォルトの名無しさん :03/09/07 05:15
>>78
perl

a ! b

80 名前:デフォルトの名無しさん :03/09/07 05:16
違った
a xor b

81 名前:デフォルトの名無しさん :03/09/07 05:32
>>61
なぜ^^がないのか考えてみたら?

82 名前:デフォルトの名無しさん :03/09/07 06:56
にこにこ顔に見えるから

83 名前:デフォルトの名無しさん :03/09/07 09:03
確かにデバッグ中にそんな顔が見えたらムカつくな

84 名前:デフォルトの名無しさん :03/09/07 10:34
for (; ;)//~~~

85 名前:デフォルトの名無しさん :03/09/07 10:54
while(T_T)

86 名前:デフォルトの名無しさん :03/09/07 14:50
GoF本に気になる記述があったので、ちと疑問がわいたのですが、

さぁって、privateメンバ関数を公開しちゃうぞー、ええと…
friend Aには、このメソッドのみ公開
friend Bには、同クラスのこのメソッドのみ公開

なんて振り分けはできませんよね?

87 名前:デフォルトの名無しさん :03/09/07 14:54
出来ない。

88 名前:デフォルトの名無しさん :03/09/07 14:56
>>87
ですよねぇ、GoFめ…ちょっと期待しちゃいましたよ
レスサンクスです

89 名前:デフォルトの名無しさん :03/09/07 16:29
>>86
friend class のことじゃないかな?
まぁそれでも意味不明だが

90 名前:デフォルトの名無しさん :03/09/07 16:50
>>86
GoF今手元にないので、ちょっとずらして
相手ごとに一部を公開するにはって話として。
class Hoge {
 private:
 void ForA();
 class HogeForA {
  Hoge& hoge;
 private:
  HogeForA(Hoge& h):hoge(h) {}
  void ForA() { h.ForA(); }
  friend class A;
 };
public:
 HogeForA& FromA() { return HogeForA(*this); }
...
};
のように相手ごとにproxyとしてインナークラス作って
そちらにfriendつけてやるってことは出来るよね。
(hoge.FromA().ForA(); みたいに使う)


91 名前:デフォルトの名無しさん :03/09/07 17:15
こんなC++はいやだ

int n;
cin(n);
cout("こんにちは") (n) (0.123) (0xfffff);

coutのストリーム入出力がoperator ()で実装されている

92 名前:デフォルトの名無しさん :03/09/07 17:18
>>91
読みやすいですね。
cout にも括弧をつけるとなお良し。

93 名前:デフォルトの名無しさん :03/09/07 17:21
>>91
http://www.tietew.jp/cppll/archive/533

94 名前:デフォルトの名無しさん :03/09/07 17:28
今某サイトのC++初心者講座を読んでいたのですが、
ビット演算のところでその難しさにぶつかりました。

一応基本的な意味は理解したつもりなのですが、
上手くプログラムの中に組みこめるかと言われたらたぶん無理っぽいです。
実際にビット演算ってどのように使うのでしょうか?
ビット演算の応用というか実用例などを教えてもらえませんか?

95 名前:デフォルトの名無しさん :03/09/07 17:32
環境で用意されるフラグの処理に必要なこともあるが
基本的にはわざわざ使わなくていいよ

96 名前:デフォルトの名無しさん :03/09/07 17:59
>>94
おまい59じゃないだろうな

てか2進数勉強しなはれ

97 名前:デフォルトの名無しさん :03/09/07 18:07
必要だから使うのであって、必要でないところに使う必要は無い。

98 名前:デフォルトの名無しさん :03/09/07 18:13
>>94
例えば非同期ファイルI/OしようとするとOS固有のシステムコールを使うことになるが、
そのときオープンモードやシェリングモードの指定にビット演算をよく使う。

組み込みではICにコマンドを送るときにデータバスのmona番をH、giko番をLにする
てなパターンがよく出てくる。

どーせ最適化されてるよ♥ とタカをくくってたある日、なんか遅いんで
コンパイル結果のアセンブラ見たら16で割ってやがったなんてこともよくある。

99 名前:デフォルトの名無しさん :03/09/07 18:23
try{
 char *p = NULL;
 printf("\s", p);
}catch(...){
 for(; ;)//~~~
  printf("ぬるぽ");
}

100 名前:94 :03/09/07 18:23
応用は上級者の領域っぽいですね。正直言って難しいです。
今読んでいる講座にあった、
「44は44、81は84、というように、その数以上の4の倍数のうち最も小さい数を求める式を作って下さい。」
と言う問題の解答が、「(x + 3) & ~3」
なんとなく意味はわかるのですが、自分でこういう物を発想するのは難しいですね。
勉強して行けばこういう物も自力で考え出せる様になるのでしょうか?
既に才能が無いと思って諦めるべき?

>>96
59ではないです。2進数も一応分かってますよ。

101 名前:デフォルトの名無しさん :03/09/07 18:26
>>100
加算器とかの仕組み勉強していじくりまわすとイメージしやすくなるかも。
あとはモノクロのグラフィック処理を行うときにはイメージが必要になってたけど
最近そんな用事あんまりないか?

102 名前:デフォルトの名無しさん :03/09/07 18:30
>>94
>「(x + 3) & ~3」
コンパイル通らんぞ・・・

103 名前:94 :03/09/07 18:31
スマン
^ じゃなく~だな

104 名前:デフォルトの名無しさん :03/09/07 18:32
>>102
本当?

105 名前:103 :03/09/07 18:34
OH 俺もタイポか・・・逝ってくる

上の>>103 は俺な

106 名前:94 :03/09/07 18:36
103は私ではありません。

>>101
加算器ぐぐって勉強してみます。
解説には、ビットマップを扱う時に必要になる実用ルーチンだと書いてありました。
良く意味はわかりませんが、
色々やろうとするとこういうビット演算の修得も必要とされるみたいですね。

頑張れる所まで頑張ってみます。

107 名前:デフォルトの名無しさん :03/09/07 18:42
>>105
タイ━━━||Φ|(|´|゚|ω|゚|`)|Φ||━━━ポ!!!


108 名前:デフォルトの名無しさん :03/09/07 20:54
初心者質問ですがよいですか?
クラスのpublic:の中に

hogehoge() : known1(""),known2(""),known3(""),unknown1(""),unknown2(""){munyamunya();}

といった記述があったのですが、このように関数の後にコロン一つで
区切って複数の関数名?を並べているのはどういう意味があるので
しょうか?本見てもそれっぽい記述が見つからないものですから・・・
すいません。

109 名前:デフォルトの名無しさん :03/09/07 21:00
>108
調べるべきキーワードは「コンストラクタ」、「初期化」。


110 名前:デフォルトの名無しさん :03/09/07 21:01
>>108
コンストラクタの初期化リストだろ?

111 名前:デフォルトの名無しさん :03/09/07 21:08
お二方、ありがとうございます

112 名前:デフォルトの名無しさん :03/09/07 21:57
 int& a;
 int &a;

皆さんはどっち派ですか?

113 名前:デフォルトの名無しさん :03/09/07 22:01
>>112
どっちでもいいから
このスレで意味無し論争を巻き起こそうとか思わないでくれ
スレ違いだ

114 名前:デフォルトの名無しさん :03/09/07 22:19
RType f(T v);
の実体(定義)としてコンパイラが
RType f(const T v) {....}
を使うのは仕様で決まっているのですか?

115 名前:デフォルトの名無しさん :03/09/07 22:24
>>112
C++では下の書き方は邪道。

116 名前:デフォルトの名無しさん :03/09/07 22:25
>>114
意味わかんね

117 名前:デフォルトの名無しさん :03/09/07 22:32
int* p;
int *p;

118 名前:デフォルトの名無しさん :03/09/07 22:33
#include <stdio.h>

int hage(int i);

int main() {
hage(0);
return 0;
}

/* オーバーロードに非ず。int hage(int i) の定義なり。*/
int hage(const int i) {
printf("%s\n", "禿はドキュン");
}


119 名前:デフォルトの名無しさん :03/09/07 22:46
>>118
foo(int);
foo(const int);

がそれぞれ定義できるとして
それらをどうやって呼び分けることができると思ってんの?

120 名前:デフォルトの名無しさん :03/09/07 22:50
>>119
別にオーバーロードしたいわけではない

121 名前:デフォルトの名無しさん :03/09/07 23:08
>>144
v=vができなくなるわけか。そいつは初耳だな

122 名前:デフォルトの名無しさん :03/09/08 00:02
>>144
だそうですが、144さん。

123 名前:デフォルトの名無しさん :03/09/08 00:26
>>144
いや、そのクラスの構造は美しくないと思うよ。
基本的にソースってのは書きやすさ(タイプ数の少なさ)より
読みやすさを優先すべきだし。

あと、細かいことだけど、その場合mutableを使うより
constをつけない方がいいんじゃないかな。

124 名前:デフォルトの名無しさん :03/09/08 00:56
>>123
ここは mutable を使うべきだろ・・・と思うが好みの問題?

125 名前:59 :03/09/08 01:27
お勉強してきました。
ttp://drn.maxwell.syr.edu/drn-bin/wwwnews?comp.std.c%2B%2B/39476

やっぱり論理XOR演算子ホスィ...
禿はどう思ってるんだろう?

126 名前:びひゃーん ◆aG1zayLriw :03/09/08 01:31
>>125
禿って言うなーーーーーーーーーっ!

127 名前:デフォルトの名無しさん :03/09/08 03:04
バッファ管理をuint8_tなvectorでやるのってあり?

128 名前:デフォルトの名無しさん :03/09/08 03:12
あり

129 名前:デフォルトの名無しさん :03/09/08 16:53
Cで手軽にエラーチェックといえばassertですが、
C++にも、C++らしいassertみたいなものは、あるのでしょうか?

130 名前:デフォルトの名無しさん :03/09/08 16:56
>>129
Cと同様assertしかない。
例外投げるAssertとTraceクラス自前で作って使ってる。


131 名前:デフォルトの名無しさん :03/09/08 16:59
>>130
レスありがとうございます。
当分はassertを使い、いずれ私も自前にチャレンジしてみます。
気になると先に進まないもので…助かりました。

132 名前:デフォルトの名無しさん :03/09/08 17:19
あーあ・・・

133 名前:デフォルトの名無しさん :03/09/08 17:29
うちのC++は獰猛で困っています。

134 名前:デフォルトの名無しさん :03/09/08 17:48
>>133
困らなくていい。

135 名前:デフォルトの名無しさん :03/09/08 20:08
>>129
強いて言えば Enforcement とか
http://www.cuj.com/documents/s=8250/cujcexp2106alexandr/

基本的には assert で十分足りると思うけどね。

136 名前:デフォルトの名無しさん :03/09/08 21:35
C++ってなんですか?おしえてください。

137 名前:デフォルトの名無しさん :03/09/08 21:52
私のC++は狂暴です。

138 名前:デフォルトの名無しさん :03/09/08 22:18
マクロやだ。やっぱC++用のスコープが効く仕掛けがホスイ。

139 名前:デフォルトの名無しさん :03/09/08 22:27
namespace + inline でFA

140 名前:デフォルトの名無しさん :03/09/08 22:52
call by nameをサポートしたC++がホシゥィ

141 名前:デフォルトの名無しさん :03/09/09 00:18
>>136
C++=チンプラプラ
まぁ大体の意味はこんな感じ。

142 名前:デフォルトの名無しさん :03/09/09 00:27
>>140
ならC++なんて使うな。
Objective-Cでも使ってろ


143 名前:デフォルトの名無しさん :03/09/09 00:54
C++を勉強している工房です。

AというクラスとBというクラスがあるとして、
それぞれが、それぞれを参照するのはC++的にOKなんでしょうか?

例:
class A{
public:
B m_b;

}

class B{
public:
A m_a;

}

友達に聞いた話だと、上のような場合、相互参照といってC++的によくないとかなんとか聞いたんですけど・・・
コンパイルは通るみたいなんですけど、どうなんでしょ?



144 名前:デフォルトの名無しさん :03/09/09 01:10
C++的にはOKだが、設計としてよくない。

145 名前:デフォルトの名無しさん :03/09/09 01:14
>>143
参照もしくはポインタならいいが、それは不可だ。

146 名前:デフォルトの名無しさん :03/09/09 01:15
>>143
コンパイルはできても実行不可能な気が・・

147 名前:デフォルトの名無しさん :03/09/09 01:16
>>144
C++的にも無理な気が・・・
Aの中にBの実体入ってるし、Bの中にAの実態入ってるよ。
ポインタとかにしてAやBの外部に出さないと・・・
構造的によくないのは同意。


148 名前:デフォルトの名無しさん :03/09/09 01:27
>コンパイルは通るみたいなんですけど
ほぅ コンパイラは何をご使用でしょうか?

149 名前:デフォルトの名無しさん :03/09/09 14:47
>>143-144,146
合わせ鏡状態だ。sizeof(A)はいくつかな?

150 名前:デフォルトの名無しさん :03/09/09 15:25
コンパイルすら通らない気がするんだが。。。
コンパイルが通るって友達に聞いた話なら、騙されてないか?


151 名前:その1 :03/09/09 21:34
教科書的な+演算子のオーバーロードです。
class Uint64 {
int var;
public:
Uint64(int i) : var(i) {}
};

Uint64 operator+(const Uint64& lhs, const Uint64& rhs)
{
Uint64 tmp(lhs);
return tmp;
}

int main()
{
Uint64 u = 1;
u = 2 + u;
u = u + 3;
}


152 名前:その2 :03/09/09 21:35
これをテンプレート化すると、うまくいきません。
template <typename T> class UINT {
T var;
public:
UINT(int i) : var(i) {}
};

template <typename T> T operator+(const T& lhs, const T& rhs)
{
T tmp(lhs);
return tmp;
}

typedef UINT<int>Uint64;

int main()
{
Uint64 u = 1;
u = 2 + u;
u = u + 3;
}
エラー!

153 名前:その3 :03/09/09 21:36
回避法は下記以外にスマートな方法がありますでしょうか?
template <typename T> class UINT {
T var;
public:
UINT(int i) : var(i) {}
UINT operator+(const T& rhs){
T tmp(rhs);
return tmp;
}
};

template <typename T> T operator+(int lhs, const T& rhs)
{
T tmp(lhs);
return tmp;
}

typedef UINT<int>Uint64;

int main()
{
Uint64 u = 1;
u = 2 + u;
u = u + 3;
}


154 名前:デフォルトの名無しさん :03/09/09 21:58
template <typename T> class UINT {
T var;
public:
UINT(int i) : var(i) {}
};

template <typename T> UINT<T> operator+(const UINT<T>& lhs, const UINT<T>& rhs)
{
UINT<T> tmp(lhs);
return tmp;
}

こーじゃねーの?

155 名前:デフォルトの名無しさん :03/09/09 22:02
template <typename T, typename U>
T operator+(const T& lhs, const U& rhs)
{
T tmp(lhs);
return tmp;
}


156 名前:155 :03/09/09 22:04
あー、>>154が正解だすな

157 名前:151 :03/09/09 23:25
>>154
ご回答ありがとうございます。
が、残念ながらそれでは状況は変わりませんです。

158 名前:デフォルトの名無しさん :03/09/10 00:10
>>144
便乗ですが、やっぱり互いに知ってる状態が
出てくるようだと、設計として駄目なのでしょうか?

今自分のソース見たらそんなのばかりで…。
依存はなるべく少なくしようとは思ってるのですが、どうにも。



159 名前:デフォルトの名無しさん :03/09/10 00:24
>>151-157
1: operator+ でなく operator+=( UINT<T> ) を定義して、
2: boost::addable で UINT<T>+UINT<T>, UINT<T>+T, T+UINT<T> を自動生成

UINTをimmutableにしたいってんだとツラいけど。

160 名前:デフォルトの名無しさん :03/09/10 00:43
>>157
template <typename T> class UINT {
T var;
public:
UINT(int i) : var(i) {}
friend UINT<T> operator+(const UINT<T>& lhs, const UINT<T>& rhs)
{
UINT<T> tmp(lhs);
return tmp;
}
};


161 名前:デフォルトの名無しさん :03/09/10 00:51
u = (Uint64)2 + u;
u = u + (Uint64)3;


162 名前:151 :03/09/10 01:02
>>160
ありがとうございます!!
感激、感動、完動です。
friend関数のインライン展開??
実際にはreturnの前に
tmp += rhs;
を書くだけでOKですから、使えますね。

163 名前:デフォルトの名無しさん :03/09/10 01:17
template <typename T> class UINT {
T var;
public:
UINT(int i) : var(i) {}
friend UINT operator+(const UINT& lhs, const UINT& rhs)
{
return UINT(lhs) += rhs;
}
};

164 名前:151 :03/09/10 01:34
>>163
おお、シェイプアップされてる!!
return文の一行とは素晴らしいです。ありがとうございます。
ちなみに提示した例ではOKですが、実際のプログラムでは、<T>の省略はダメでした。
実は
typedef unsigned intUINT32;
typedef UINT< UINT32 >UINT64;
typedef UINT< UINT64 >UINT128;
typedef UINT< UINT128 >UINT256;
なんてことして使うんですよ。もちろん学習&遊び用に作ったんですけどね。

165 名前:158 :03/09/10 02:23
すいません、気になりますが限界で…寝ます

166 名前:デフォルトの名無しさん :03/09/10 06:33
http://pc2.2ch.net/test/read.cgi/tech/1062507109/187
問1. C++言語の正しい学習法はどれか。次の中から選べ。
1. C言語と異なるコーディング方式を異端視し、そういうものは受け付けない。
2. 今までのC言語の方式を捨て、C++プログラマーとして生まれ変わる。
3. 自分が二重人格になったつもりで、C++の方式にも適応できるようにだけしておく。


167 名前:●のテストカキコ中 :03/09/10 07:29
http://ula2ch.muvc.net/ (このカキコは削除しても良いです)

168 名前:デフォルトの名無しさん :03/09/10 11:45
>>166
仕事で使うなら3だな。

169 名前:デフォルトの名無しさん :03/09/10 13:38
a = 0のとき、
c = d + e;
a = 1のとき、
c = 2 * d + e;
・・・
a = 255のとき
c = d * (d + e);

のように、aの値によって、cに入れたい式が非規則的に変わります。
if 文や switch 文でずらずら書くのを使用せずに、
早い速度でこれを行いたいのですが、うまい方法はないでしょうか?
テーブルみたいなのを使用したいのですが、
値に式を持たせるのがわかりません。

170 名前:デフォルトの名無しさん :03/09/10 13:55
>>169
関数へのポインタをテーブルで持つ。

171 名前:デフォルトの名無しさん :03/09/10 14:07
>>170
遅くなるだろ。


172 名前:デフォルトの名無しさん :03/09/10 14:08
boost::fsmで実装する>>170
ネタだが。


173 名前:デフォルトの名無しさん :03/09/10 14:14
>>169
速くてうまい方法などない。
単に字面が気に入らないだけなら
#define begin_eval() switch(a){
#define eval(n, exp) case n: c = exp; break;
#define end_eval() }
とでもやっておけ。激しくキモいが

174 名前:デフォルトの名無しさん :03/09/10 15:05
inline int get_value() { return value; }

のような、インライン指定した関数があったとして、
他の関数に 関数ポインタとして get_value を渡した場合、

1. get_value 関数が作成され、インライン展開されない
2. get_value 関数が作成されるものの、直接呼び出している
  部分ではインライン展開される。

一般的なコンパイラはどういう処理をするのですか?

175 名前:デフォルトの名無しさん :03/09/10 15:10
2


176 名前:デフォルトの名無しさん :03/09/10 15:21
>>170
templateではコンパイル時にaの値が確定している必要があるし。。。むむむ

177 名前:デフォルトの名無しさん :03/09/10 15:47
>169
実行速度という観点ならswitchが一番まともなコードを吐くコンパイラが多いと思う。
どうしてもってならこんな感じだが、いずれにせよ列挙しなきゃならないのは変わりないし、
switchと等速かそれより遅くなると思う。

int case_0(int d, int e) { return d + e; }
int case_1(int d, int e) { return 2*d + e; }
 :
int case_255(int d, int e) { return d*(d + e); }

int (* funcTable[])(int, int) = { case_0, case_1, ..., case_255 };


c = funcTable[a](6, 4);

まあ式は非規則的だけど、aの取りうる値より式の種類が少ないならswitchより
多少みてくれはいいかもしらんがね。


178 名前:デフォルトの名無しさん :03/09/10 16:01
関数オブジェクトをテーブルで持ってみた。
関数ポインタよりインライン展開される分ましなはず。
ただしコンパイラを選ぶし実行速度も測ってない。
とりあえずCygwin GCC 3.2で動いた。

#include <iostream>
#include <boost/function.hpp>

template<int n> struct fn {};
struct fn<0> { int operator() (int d, int e) { return d + e; } };
struct fn<1> { int operator() (int d, int e) { return 2 * d + e; } };
struct fn<2> { int operator() (int d, int e) { return d * (d + e); } };

boost::function<int(int, int)> table[] = { fn<0>(), fn<1>(), fn<2>() };

int main (int argc, char** argv) {
  for (int i = 0; i < 3; ++i) {
    std::cout << table[i](5, 7) << std::endl;
  }
}

179 名前:デフォルトの名無しさん :03/09/10 17:07
>>169
普通にswitchで囲った方がいいんでない。

template<int N>
inline int DispachFunc(int d,int e);

class Nothing{};
int Selectfunc(int a,int d,int e)
{
    int temp;
    switch(a){
    case 0:
        temp = DispachFunc<0>(d,e); break;
    case 1:
        temp = DispachFunc<1>(d,e); break;
    case 2:
        temp = DispachFunc<2>(d,e); break;
    default:
        throw Nothing();
    }
    return temp;
}



180 名前:デフォルトの名無しさん :03/09/10 17:29
問題やってもらえませんか?

1.要素が3つある整数型の配列 A[3] をプログラムの中で初期化( {3,5,7} )し、その配列と文字列 "TEST" を、ダイナミックアロケーションによって確保されたメモリへ格納する。何かキーを押されたら、プログラムを終了する。

2.次に示すような文字列の配列データを順にスタックへ格納し、取り出すプログラム。コマンドは、 "i" で格納、 "o" で出力、 "e" で終了とし、スタックを操作する際扱った文字列を画面に出力する。上下限を超えたらメッセージを出力し、エラー処理を行なう。
char *w[7];
w[0] = "Monday";
w[1] = "Tuesday";
w[2] = "Wednesday";
w[3] = "Thursday";
w[4] = "Friday";
w[5] = "Saturday";
w[6] = "Sunday";


181 名前:デフォルトの名無しさん :03/09/10 17:33
>>180
宿題スレに書いたあとで、ここにも書くのかよ、いい度胸だな。


182 名前:●のテストカキコ中 :03/09/10 17:38
http://ula2ch.muvc.net/ (このカキコは削除しても良いです)

183 名前:デフォルトの名無しさん :03/09/10 17:39
181のような煽りはスルーします。

184 名前:デフォルトの名無しさん :03/09/10 18:07
>>181
その度胸をたたえて答えてやれ。

185 名前:169 :03/09/10 18:08
いろいろ案をありがとうございます。
もともとはswitchでやっていたところでしたが、
>>177の方法にしたら9割程度の速さになりました。

>>178は私には理解不能でした。

186 名前:デフォルトの名無しさん :03/09/10 18:24
>>181
1番だけな
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(){
int A[3]={3,5,7};

int *pt_i;
char *pt_c;

pt_i = (int *)malloc(sizeof(int)*4);
pt_c = (char *)malloc(sizeof(char)*5);

pt_i=A;
strcpy(pt_c,"TEST");

free(pt_i);
free(pt_c);
}

187 名前:デフォルトの名無しさん :03/09/10 18:29
sizeof(char)キターーーーーーーーーーーーーーーーーーーーーーーーーーーーーッ!!

188 名前:デフォルトの名無しさん :03/09/10 18:35
>>178の方法は関数オブジェクトのインライン展開を利用したもので、
コンパイル時に<>内のパラメータが確定していればcall命令は生成
されないはず。
但しfor文を展開するなどの面倒な仕事をコンパイラがしなくてはいけ
ないし、いつもfor文とは限らない。

189 名前:デフォルトの名無しさん :03/09/10 18:41
>>186
180のレベルにお似合いの低脳なソース。めでてえな。


190 名前:デフォルトの名無しさん :03/09/10 18:44
charのサイズは固定です。

191 名前:デフォルトの名無しさん :03/09/10 18:45
ID無しっておもろいな

192 名前:デフォルトの名無しさん :03/09/10 18:47
ここは「C++相談室」です。
<stdio.h>な方、 mallocな方、strcpy()な方はお帰りください。


193 名前:デフォルトの名無しさん :03/09/10 18:47
>>188
> コンパイル時に<>内のパラメータが確定していればcall命令は生成
> されないはず。
確定してないとコンパイル通らないし。

> 但しfor文を展開するなどの面倒な仕事をコンパイラがしなくてはいけ
> ないし、いつもfor文とは限らない。
たまたま実行例をforで書いただけで、テクニック自体はforは無関係。

それよかboost::functionのオーバーヘッドが気になるところ。

194 名前:デフォルトの名無しさん :03/09/10 19:02
191==186

195 名前:デフォルトの名無しさん :03/09/10 20:00
>180のためにソース書いてて罠にはまったんだけど
前方宣言って同一ソース内じゃ役に立たないのね。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=143

196 名前:空き缶☆ :03/09/10 20:11
今度コンパイラをvisual c++に変えようとおもうのですが
インストールの時に表示されるプロダクトIDには何と入力すればいいですか?

197 名前:デフォルトの名無しさん :03/09/10 20:13
CDだかケースだかに書いてあるIDだよ。

198 名前:空き缶☆ :03/09/10 20:16
探しましたが、書いてなかったんです。

199 名前:デフォルトの名無しさん :03/09/10 20:26
ケースにシールが貼ってあるはずなんですが...

200 名前:デフォルトの名無しさん :03/09/10 20:28
>>193
> それよかboost::functionのオーバーヘッドが気になるところ。
渡してるのが stateless_function_obj なので仮想関数不要で、
 function::operator() ← inline展開を期待
   (*function.invoker)()
      fn<n>::operator() ← inline展開を期待
関数ポインタcall一発になるはず。うまく行けば。

201 名前:デフォルトの名無しさん :03/09/10 20:29
ヨドバシ逝って製品版買って来い。大体すれ違い。

202 名前:空き缶☆ :03/09/10 20:31
すいませんでした。

203 名前:デフォルトの名無しさん :03/09/10 20:37
>>200
ども。関数ポインタテーブルとコスト的には変わらない様ですね。
fn<0> と fn<1> は別な型なのに無理矢理押し込めてる所為で、
boost::functionが何かやってるとおもったら、案の定。

204 名前:デフォルトの名無しさん :03/09/10 21:42
>>202
ここにのってるぬょろー。
ttp://www2.strangeworld.org/uedakana/


205 名前:デフォルトの名無しさん :03/09/10 21:55
>>204
今時こんな部落らで落ちるPCってあるのか?

206 名前:デフォルトの名無しさん :03/09/10 22:22
>>205
「空き缶☆」は明らかに割れ厨だろ?
漏れは204はURLで透明アボーンになってて気づかなかったが。

207 名前:デフォルトの名無しさん :03/09/11 00:31
>>186は、よくも堂々と大間違いを書き込めるな。

208 名前:デフォルトの名無しさん :03/09/11 01:23
eejan

209 名前:デフォルトの名無しさん :03/09/11 03:42
>>180
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=144
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=145

210 名前:174 :03/09/11 08:46
>>175
なるほど。
コンパイラって結構賢いんですね。
ありがとう


211 名前:デフォルトの名無しさん :03/09/11 22:22
コンパイラはなんていうかネ申

212 名前:デフォルトの名無しさん :03/09/12 00:07
クラスのオーバーロードで定義した後置++が
そのクラスが参照される前に呼び出されてるみたいなのですが
これは仕様でしょうか?
Var a(10);
printf("%d\n", a++ + 1); ・・・ 12

213 名前:212 :03/09/12 00:23
自己解決しました。忘れてください。

214 名前:名無しさん@Emacs :03/09/12 09:06
前スレでお世話になったものです。
で、今回ちと compiler の bugっぽいものを発見したんだけど、
もしかして仕様の versionによる違いかなあ、とか思ったので
教えてくれろ。

問題は:

class hoge {
 typedef enum {tako, ika} uni;
 struct huga {uni a; int b};
    :
};

となってるクラス定義がエラーになってしまうことです。
正確には hugaの行で "uniに accessするのはまかりならん" というような
errorがでます。
compilerの bugやんけ、といいたいんですがなんか理由があったりするの
かしらん?
ちなみに VC++や GNU C++では通してくれました。


215 名前:デフォルトの名無しさん :03/09/12 10:18
>>214
そのコンパイラが正しい。

11.8 -1-
"The members of a nested class have no special access to members of an enclosing class,
nor to classes or functions that have granted friendship to an enclosing class;
the usual access rules shall be obeyed.
The members of an enclosing class have no special access to members of a nested class;
the usual access rules shall be obeyed."

216 名前:215 :03/09/12 10:43
ごめん。
ttp://std.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html#45
ってことで、
11.8 -1- は以下のように変更されるそうだ。
"A nested class is a member and as such has the same access rights as any other member."

ということで、そのコンパイラが Defect Reports に追いついてないってことみたい。
「仕様の versionによる違い」と言える。

217 名前:デフォルトの名無しさん :03/09/12 12:05
MSVC5.0なのですが、変数内の文字列置換はどうやってするのでしょうか?

教えて頂けると光栄です。

218 名前:デフォルトの名無しさん :03/09/12 12:13
VC5.0ではできない。VC7.1ならできる。


219 名前:デフォルトの名無しさん :03/09/12 15:53
質問です。
下のHogeクラスの内部構造体
Dataの set関数をクラス定義の外に書くにはどうすればいいでしょうか?
set関数は、 引数_a を メンバー変数 a に代入する関数です。

class Hoge
{
public:
    struct Data
    {
       void set( int _a );
       int a;
    };
};


220 名前:デフォルトの名無しさん :03/09/12 16:02
>>219
void Hoge::Data::set(int _a)

221 名前:デフォルトの名無しさん :03/09/12 17:48
template<typename T>
class A{
long method(){
   if( T = long){
...
   }else if(T= float){
...
   }else{
...
   }
}

みたいな感じで
特定の型の時だけ、分岐したいのですが
どうすればいいのでしょうか?

222 名前:デフォルトの名無しさん :03/09/12 17:48
==でした

223 名前:デフォルトの名無しさん :03/09/12 18:09
>>221
特別バージョンとか?

224 名前:デフォルトの名無しさん :03/09/12 18:17
>>221
実行時に分岐したいならtypeidでできるかも
無駄としか思えないが

225 名前:デフォルトの名無しさん :03/09/12 18:18
>>221
#include <iostream>

template <typename T> class A
{
public:
    long method();
};

template <typename T> long A<T>::method()
{
    return 0;
}

template <> long A<long>::method()
{
    return 1;
}

int main()
{
    std::cout << A<char>().method() << A<long>().method() << '\n';
}

これコンパイル通ったんだけど(VC7)、標準に準拠してる?<規格博士

226 名前:デフォルトの名無しさん :03/09/12 18:29
>>221
特殊化するのが面倒ならば、

template< typename L, typename R >
struct comp_type{ enum{ value = false }; };

template< typename T >
struct comp_type< T, T >{ enum value = true }; };

を使ってみるとか。

227 名前:デフォルトの名無しさん :03/09/12 18:34
>>221
boostをしらべて。

228 名前:デフォルトの名無しさん :03/09/12 18:35
>>221
lokiをとしらべて

229 名前:デフォルトの名無しさん :03/09/12 19:18
>>221
ずばり、Lokiですな。

230 名前:221 :03/09/12 20:49
モダンC++デザインの本に載ってた
うらお2の本にもヒントのってた
なんとなくわかった。
ありがd

231 名前:二一四 :03/09/13 00:32
>>215 バグともいいきれんのですね。むーん。
バグだとしてもすぐ直る訳はないので、
uniを外に出したりしてごまかすしかないのですが。

そんなことより、1よ、ちょっと聞いてくれよ。愚痴だけど。
今日は templateの instantiationではまってドキュメント
読むのに1日費やしちゃったよ。
結局 compile optionひとつつけて回避できたけど。
まあ、勉強にはなったけどな。そこらへん、実践的に
書いてある本でも読んでみるか。


232 名前:デフォルトの名無しさん :03/09/13 01:14
class ってさ
宣言すると勝手にメソッド作られるだろ
コピーコンストラクタとか
operator= とか
その他いろいろ。

それを全部知りたいのですが、
サンプルのソースか何か
掲載しているページでもいいです。
教えてください。


233 名前:デフォルトの名無しさん :03/09/13 01:18
・からすが異常な時間に鳴く
・雲が地震雲と一致
・ゴキブリの大移動
・雷が雲の上に突き抜けたらしい・・
・最近動物がうるさい
・FM波が大量発生
よって2辺とその間の角が等しいので
95%の確率で  だ  い  じ   し   ん   の予感・・
コピペしてチョ

234 名前:デフォルトの名無しさん :03/09/13 01:28
・からすが異常な時間に鳴く
・雲が地震雲と一致
・ゴキブリの大移動
・雷が雲の上に突き抜けたらしい・・
・最近動物がうるさい
・FM波が大量発生
よって2辺とその間の角が等しいので
95%の確率で  だ  い  じ   し   ん   の予感・・
コピペしてチョ

235 名前:デフォルトの名無しさん :03/09/13 01:28
>>232
規格書を読みましょう。

236 名前:デフォルトの名無しさん :03/09/13 12:24
>>232
「ワンポイント・レッスン 最新Windowsプログラミングテクニック」の719ページを見れ。

237 名前:232 :03/09/14 03:52
>>235,236
いや、
大体知ってるんだよ。
でも、書くのめんどくさいんだよ
コピペさせてくれよ

238 名前:デフォルトの名無しさん :03/09/14 03:54
>>237




             し                    ね






239 名前:デフォルトの名無しさん :03/09/14 12:35
>>237
知識はお金に換算できる。それを無料で教えてくれくれ君は基本的に
逝ってよし。

240 名前:デフォルトの名無しさん :03/09/14 14:37
borlandC++のC++講座のHP無い?ほとんどがVC++の講座で困ってる。

241 名前:デフォルトの名無しさん :03/09/14 14:42
すれちがい

242 名前:デフォルトの名無しさん :03/09/14 15:58
borlandに拘っている理由による
単に無料だからって理由なら虫よすぎ

243 名前:デフォルトの名無しさん :03/09/14 17:11
ちょっとC++をかじってみる程度だからフリーコンパイラ選んだんだが
やっぱり金払ってVCをやるべき?

244 名前:デフォルトの名無しさん :03/09/14 17:13
C++の雰囲気を感じたい程度ならVCなんぞいらんだろ。

245 名前:デフォルトの名無しさん :03/09/14 19:25
雰囲気って言ってもなぁ。
使う側からすればC++はマスターしてる度合いで全然違う言語と化すぞ。

246 名前:デフォルトの名無しさん :03/09/14 23:03
>>240
ここは? 今見つけたんだけど参考にどうぞ。
ttp://homepage2.nifty.com/rohizuka/ka/pa_003_a.htm


247 名前:デフォルトの名無しさん :03/09/14 23:22
ジサクジエーンの宣伝

248 名前:デフォルトの名無しさん :03/09/15 02:12
>>246
いいね。そこで勉強するよ。

249 名前:デフォルトの名無しさん :03/09/15 13:56
CustomVertex vertices[] =
{
{ -1.0f,-1.0f, 0.0f, 0xffff0000, },
{ 1.0f,-1.0f, 0.0f, 0xff00ffff, },
{ 0.0f, 1.0f, 0.0f, 0xffffffff, },

};
HRESULT hr = d3ddev_->CreateVertexBuffer( 3*sizeof(CustomVertex),0,
D3DFVF_XYZ | D3DFVF_DIFFUSE, D3DPOOL_DEFAULT, &d3dvb_, NULL);


3*sizeof(CustomVertex)がカッコ悪いので
sizeofだけで済ませたいのですが、どうすれば配列の要素数が分かりますか?

250 名前:デフォルトの名無しさん :03/09/15 14:11
>>249
sizeof(vertices)/sizeof(CustomVertex)



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