[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/03 14:41 / Filesize : 156 KB / Number-of Response : 646
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.67【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 02:25:58 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.66【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1243440528/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か   に置換しておくことをお勧めします。

2 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 02:37:28 ]
janeの隠し機能

1.書き込みウィンドウを出し半角入力に切り替える
2.Wキーを押しっぱなしにする
3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック


3 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:24:23 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

4 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:30:12 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

5 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:31:19 ]
ERROR!
ERROR:長すぎる行があります!

6 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 09:32:45 ]
ERROR!
ERROR:>>1-5>>7-1000はゴミです!!

7 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 11:01:08 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

8 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 11:15:12 ]
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

9 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 17:56:12 ]
前スレの933ですがプログラムの問題ではなくscimの問題だったみたいで解決しました

10 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 21:51:16 ]
std::mapとtr1::unordered_mapって
速さ:std < tr1
メモリ節約:tr1 < std
でおk?



11 名前:デフォルトの名無しさん [2009/07/19(日) 22:08:40 ]
>>10
あー、一般論としてはそんな感じになると思う

12 名前:デフォルトの名無しさん [2009/07/20(月) 23:31:44 ]
class CardSet {
public:
CardSet() {make();};
//CardSet() {};
void make() {};
};
class Player {
public:
Player(){};
~Player();
};
class SubPlayer : public Player {
public:
CardSet a;
SubPlayer() {};
};
main(){
Player * a = new SubPlayer();
}
このプログラムをg++ 3.4.3 32bit Linuxでコンパイルすると、
In function `SubPlayer::SubPlayer()':
undefined reference to `Player::~Player()'
というエラーになります。しかし、CardSetのコンストラクタを
コメントアウトしている方に切り替えると、エラーなくコンパイルできます。
~Player()を定義すれば済む話ですが、なぜこのような違いが起こるのでしょうか?

13 名前:デフォルトの名無しさん [2009/07/20(月) 23:45:15 ]
固定小数点同士の乗算がしたいのですが
掛けたらオーバーフローになってしまうのでどうしたらいいのかわかりません

今は片方を普通の小数にしてやっちゃってますが意味がない気がするし
整数と小数をわけて乗算するしかないのでしょうか
それだとあまり意味がないのでしょうか

14 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:18:46 ]
>>13
32bit×32bitは64bitになる。これあたりまえの話ね。
だからアセンブリ言語では大抵、整数乗算命令は上半分と下半分を別々に取得することが出来るようになっている。

C言語の枠内では(__asmとかintrinisic関数とか使わない限り)効率的な方法は存在しない。
シフトしながら足し算していこうかな、とか
32bitを16bit+16bitに分割して4回掛け算をやろうかな、程度。

15 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:39:21 ]
>>14
もう1つある。最適化を期待するんだ。
int32_t x, y;
int64_t z;
という状況で、VCは最適化ありにすればz = (int64_t)x * y;をimul(32 bit * 32 bitの結果を64 bitで返す)1つにしてくれる。
よそのコンパイラもこれくらいやってくれるだろう。

ところで、>>13は固定小数点数同士を掛けた後、右シフトしていないだけのような気がする。
小数部Nビットの固定小数点数同士を掛けると、小数部が2Nビットの固定小数点数になるから、
小数部Nビットで結果が欲しいなら、Nビット右シフトが必要だぞ。

16 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:04:17 ]
>>14-15
そういえばアセンブラとかだと二つのレジスタに入ったりしましたね

シフトは忘れていなかったんですが
掛けた時点で内部では32bitのままなのかなって思ったりしました

vc使ってるんですが64bit整数の型名知らないですが
((int64)a * b)>>16 こんな感じに出来るのでしょうか

17 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:13:54 ]
__int64かな。
long longも使えた気がする。

18 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:25:52 ]
あ、型名入れてやったら出来ました
ありがとうございました!

19 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 02:42:29 ]
>>12
SubPlayer の生成中に、まず基底クラスである Player の構築が完了する、その後
メンバ変数である CardSet の構築が行われるが、この中の make() から例外が発生した場合、
すでに構築が完了した基底クラスを解体するため Player のデストラクタが呼ばれる。

CardSet のコンストラクタが空であれば、この途中で例外が発生しないことがコンパイラに
わかるので、 SubPlayer のコンストラクタで Player のデストラクタが必要になるフローがなくなる。

20 名前:デフォルトの名無しさん [2009/07/21(火) 20:03:05 ]
>>19
ありがとうございます。
そのような理由があったのですね。すっきりしました。



21 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:12:24 ]
質問があります
完全に今から始める初心者なんですが、USB機器の例えばゲームパッド等からの入力を
例えば1のボタンを押したらキーボードのAに対応させるみたいに外部機器をキーボードの代わりにする
みたいなことをしたいんですけどこういったのがこう言うのを作るのは難しいですか?
それとこう言う物を作れるようになるための勉強の方法って猫でも分かる〜や、ゲームの作り方関係の本でも大丈夫でしょうか

22 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:45:10 ]
>>21
OS上の動作全般に渡ってキーボード代わりとして使いたいのなら、
デバイスドライバを作成する必要がある。
Windowsの場合は、WDKでググれ。ただしほぼ断言していいが、初心者には無理。

自分のアプリだけでそうしたいのなら、ゲームパッドの入力ができればあとは簡単でしょ。

23 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:54:44 ]
>>22
自分のアプリだけでって言うのは例えば自分の作ったゲーム内でのみ対応できる 見たいな感じでしょうか?
普通のキーボードじゃなくて別のものをキーボードにしたいんですよ
となるとデバイスドライバ云々って言う難しいほうになるのかな
そう言うのを作るにはどういった勉強したらいいか何か教本的な物ってありますか?

24 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:03:05 ]
DirectInputとか

25 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:36:52 ]
>>23
> 自分のアプリだけでって言うのは例えば自分の作ったゲーム内でのみ対応できる 見たいな感じでしょうか?
そのとおり。それでいいのなら別に難しいことではない。
キーボードだろうがキーボードじゃないものだろうが、そこはあまり関係ない。

26 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:37:31 ]
SendKeysとか

27 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 01:39:03 ]
>>23
それはつまり
>九九が分からないんですけど大学入試数学のいい参考書はありますか?
みたいなことを言ってるってことをとりあえず理解してね。
その上で九九から始める覚悟があるなら、
とりあえず「C言語の入門書」でも探してみればいいんじゃないかな

28 名前:デフォルトの名無しさん [2009/07/22(水) 14:20:26 ]
catchされない例外が投げられるときはデストラクタが呼ばれない
なんてことありますか?

29 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:21:33 ]
>>28 はい。

30 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:23:25 ]
例外の細かい動作がいまだにわからない俺クリムゾンヴァイパー



31 名前:デフォルトの名無しさん [2009/07/22(水) 14:23:43 ]
そうか・・・
確実に呼ばせるにはmainでcatch(...)するしかない?


32 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:26:08 ]
>>31 はい。

33 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:26:42 ]
exitとかabortとかすると呼ばれないと思うから確実には無理じゃないか

34 名前:デフォルトの名無しさん [2009/07/22(水) 14:34:36 ]
>>33
さすがにそれは保証外で
>>29
なんかソースあったら教えて下さい
デストラクタは例外投げられたときも呼ばれるという話ばかり見てきた気がする

35 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:36:45 ]
new Object;
throw -1;

36 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:41:45 ]
ml.tietew.jp/cppll/cppll/thread_articles/12819

37 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:46:42 ]
処理系依存かー

38 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 16:37:58 ]
ある初期化されたリファレンスがあったとして、ほかのインスタンスの参照を代入することはできないんでしょうか?

int a(0), b(1);
int& r(a);

r=b; // aにbを代入ではなく、rにbの参照を渡したい

39 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 16:57:03 ]
>>38
無理

40 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 17:00:14 ]
次スレからはメール禁止をテンプレに入れとけよ



41 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 17:02:49 ]
それこそ金払ってやってもらえよ
専属の教師じゃねーんだぞ

42 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 21:01:15 ]
factory methodってtemplateクラスに使う意味ってある?

43 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 22:14:37 ]
Factoryの利点の一つはインプリメントとインタフェースを分離することだから
templateでもその利点はあると思う。

44 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:47:36 ]
cに限った話じゃないんだけどLinkedListってなんで線形リストって言うの?
連結リストでしょ?

45 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:54:57 ]
Wikipediaによれば、線形リストは連結リストの分類のひとつらしいよ
両端を連結した循環リストは、線形リストでないっぽい

46 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 15:58:59 ]
リストを管理してる先頭からしかたどれないのが線形リスト
これに一方向だけでなく戻りもOKにしたのが双方向リスト
ループするのが循環リスト

これらの総称が連結リストでいいんでないの?

47 名前:デフォルトの名無しさん [2009/07/23(木) 18:44:55 ]
visual studio を使っているのですが、
一定間隔で処理する方法で困っています。
無限ループを作ってtimeGetTime()を使って時間待ちをして行っていますが、
GUIからのボタン操作を受け付けることができなくなってしまいました。

GUIのボタンを押して無限ループから抜けるためにはどうすればよいでしょうか?
よろしくお願いします。

もしくは、もっとよい方法がありますか?




48 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:47:16 ]
無限ループを作らず、タイマを使え

49 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:50:17 ]
>>47
PeekMessage+GetMessage

50 名前:47 [2009/07/23(木) 19:24:04 ]
アドバイスありがとうございます。
>>48
タイマを使ってみたのですけど、
たとえば50ms周期で処理しようとすると60ms近辺が周期になって
しかも、40msとか70msとかばらつきも大きくてこれは使えないなぁと。
タイマの精度は1msだとwebで見たことありますが実際どうなんでしょう?

>>49
GetMessageを使えないかと思って、WINAPI関数の中の
GetMessageのところでブレークポイント設定したのですけど
ブレークできなくて、なぜなのかよく分かりませんでした。
ブレークできないなんてことあるんでしょうか?

while (GetMessage(&msg, NULL, 0, 0)) {
→ TranslateMessage(&msg);
DispatchMessage(&msg);
}
上の→のところでブレークしようとしたのですが・・・。
47の内容とは直接関係ないですけど、なぜなのだろうと思いまして。











51 名前:デフォルトの名無しさん [2009/07/23(木) 19:29:08 ]
二分木プログラムの問題で、二分木の高さと大きさを求める以外で、出そうな問題ってありますか?

52 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 19:36:14 ]
>>51
ソート、検索、削除方法

53 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 20:31:38 ]
>>51
作成方法、木同士のマージ

54 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 20:35:50 ]
>>51
平衡化

55 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 00:36:23 ]
別スレッド作ればいいなじゃないの

56 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 00:43:55 ]
>>51
平衡木なら回転は普通に出るだろ

57 名前:47 [2009/07/24(金) 11:50:59 ]
無限ループの中でPeekMessageを使って
GUIのボタン処理を受け取ろうと思ってやってみましたが、
GUIが固まってしまってボタンを押すことができませんでした。
どうすればよいでしょうか?

58 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 11:52:28 ]
具体的なコードを

59 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 11:56:12 ]
というか具体的な目的を

60 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 12:00:07 ]
・処理スレッドを作成して、そこでループをぶん回す
・メッセージループでPeekMessageを使って、メッセージがない時に処理を実行して、適度に眠らせる

のどちらか




61 名前:47 [2009/07/24(金) 12:05:37 ]
>>58 ソースを載せてみます。
BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
switch( msg ){
case WM_COMMAND: // ダイアログボックス内の何かが選択されたとき
switch( LOWORD( wp ) ){
case IDOK: // 「OK」ボタンが選択された
g_hDlg2 = CreateDialog( g_hInst2, _T("IDD_DIALOG2"), hDlg, DlgProc2 );
ShowWindow( g_hDlg2, SW_SHOW );
loop_flg = 1;
while(loop_flg){
if (PeekMessage (&msg_roop,g_hDlg2,0,0,PM_NOREMOVE)) {
  ret =GetMessage (&msg_roop,g_hDlg2,0,0);
  if(msg_roop.message == WM_COMMAND ){
if(msg_roop.wParam ==IDCANCEL) {
TranslateMessage(&msg_roop);
DispatchMessage(&msg_roop);
}}}
counter++;
}
case IDCANCEL: // 「キャンセル」ボタンが選択された
EndDialog( hDlg, 0 );
break;
}}}


62 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 12:06:51 ]
ボタン宛のメッセージも回してやらないとボタン自身がマウスクリックを処理できない

63 名前:47 [2009/07/24(金) 12:16:15 ]
続き
BOOL CALLBACK DlgProc2(HWND hDlg2, UINT msg, WPARAM wp, LPARAM lp)
{
switch( msg ){
case WM_COMMAND: // ダイアログボックス内の何かが選択されたとき
switch( LOWORD( wp ) ){
case IDCANCEL: // 「キャンセル」ボタンが選択された
// ダイアログボックスを消す
loop_flg = 0;
EndDialog( hDlg2, 0 );
fclose(fp);
break;
}}}

64 名前:47 [2009/07/24(金) 12:23:55 ]
>>62
ありがとうございます。
具体的にはどうすればよいのでしょう?

65 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 12:26:59 ]
>>60
・メッセージループでPeekMessageを使って、メッセージがない時に処理を実行して、適度に眠らせる
の亜種

MegWaitForMultipleObjectsEx で シグナルにならないダミーのハンドルを引数に渡す
# array が NULL で 個数0 の場合意図した動き(timeout付き GetMessage もどき)になるんだっけ?

66 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 12:27:55 ]
PeekMessageやGetMessageで取得するウィンドウをg_hDlg2だけにしたり、
TranslateMessageやDispatchMessageするメッセージをWM_COMMAND/IDCANCELだけにするのをやめればよい

67 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 12:28:03 ]
× MegWaitForMultipleObjectsEx
○ MsgWaitForMultipleObjectsEx

68 名前:47 [2009/07/24(金) 18:23:51 ]
>>66さんの言うようにやったら
きちんと動作するようになりました。ありがとうございます。
どうして条件を指定すると動かなくなるのでしょう?

69 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 18:33:36 ]
>>62

70 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 18:59:22 ]
>>68
ウィンドウズのメッセージキューはスレッドに結びついてるんだ。
ある1つのスレッドが作ったウィンドウのメッセージは皆同じメッセージキューに入るんだ。
だからそのスレッドがほんの一部だけのメッセージしか処理しない状態だと、
その処理するメッセージ以外のGUI動作をしなくなる。

てのはC/C++でのウィンドウズプログラミングの基本なんだ。
猫でも〜辺りを一通りやった方がいい。



71 名前:hey mailto:yo [2009/07/24(金) 19:03:31 ]
nigga!

72 名前:47 [2009/07/24(金) 21:17:11 ]
>>70
キューの中にあるなら取り出さないとたまるばかりだということですか。
猫でものプログラムをvisual studio 2008 expressでコンパイルしようとしたら
よく分からないエラーが出て、挫折しました。
今は下のをやってますが、GUIを作るのに他のソフトを使いながらなので面倒です。
ttp://www.geocities.jp/ky_webid/win32c/index.html

73 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 22:51:35 ]
猫でもは内容がかなり古いしな

74 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:00:02 ]
質問があります、C/C++ と C++/CLIって全く別物なんでしょうか?

75 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:41:06 ]
>>74
CLI やマネージドメモリ周りは独特だけど、それ以外は普通の C++。
この記事を見ると感触が掴みやすいかも。

C++/CLIによるCライブラリの.NET化
codezine.jp/article/detail/1382?p=1

C/C++ の学習用途としては、あまりお勧めできない。

76 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 23:44:34 ]
>>75
学習用途としては向かないんですね
ありがとうございました

77 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 11:23:14 ]
>>72 expressでGUIをするなら、GUIフレームワークのライブラリを使うのもひとつの方法かな。
この版に単独スレのあるGUIフレームワークは、Qt、wxWidgets、WideStudioかな。


78 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 11:33:55 ]
RADじゃないGUIフレームワークってデザインしにくくない?

79 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 11:42:20 ]
>>78 >>77のフレームワークにはRADツールは存在している。
フレームワークにはレイアウトを管理するクラスがあるからRADツール使わなくても慣れると簡単。
逆に画面デザイナを使うのが面倒になる。


80 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:24:03 ]
初期化子つきの関数ポインタの定義の構文がわかりにくい
なんでこんな構文にしたんだろう。



81 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:25:21 ]
>>80
たとえば?

82 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:44:09 ]
foo(*(*bar)(baz, hoge))(fuga)(piyo);

とかぱっと見ようわからん
typedefなしでもきれいに書ける仕様にすればよかったのに

83 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:30:29 ]
括弧の数からしておかしいじゃねーか

84 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:32:17 ]
どゆこと

85 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:44:58 ]
うろ覚えで適当に書いたんだと思われ
でもそんなに複雑かね

int foo(int x, int y, int z) {
return x + y + z;
}
int (*p)(int, int, int) = foo;

こんだけだが

86 名前:デフォルトの名無しさん [2009/07/25(土) 14:48:21 ]
もっと初心者にもわかりやすくしてください

87 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:49:22 ]
int(*)(int, int, int) p = foo;

これなら型が前に全部来てるからわかりやすいな

この間もこっちで同じような感じのがあった

C言語なら俺に聞け(入門篇) Part 50
pc12.2ch.net/test/read.cgi/tech/1246342847/

最初の疑問はこれで
pc12.2ch.net/test/read.cgi/tech/1246342847/895

いろいろあったけど結論というかこうだとよかったねというので
pc12.2ch.net/test/read.cgi/tech/1246342847/903

88 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:52:14 ]
結局のところ宣言のところでカンマで区切ればint型だろうがint型のポインタだろうが書いて行ける仕様ゆえ
型の一部が分離しちゃうんだよね


89 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 14:57:25 ]
中側から解読していくのが定石だな

90 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:08:24 ]
>>86
foo(*(*bar)(baz, hoge))(fuga)(piyo);
baz型、hoge型の2引数をとり、(fuga型を引数をとり、foo型を返す関数ポインタ型)を返す関数ポインタ型の変数barを定義して同じ型のpiyoで初期化する
わかりにくいな

foo(fuga)(baz, hoge) bar = piyo;
とか書ければ楽なんだけど・・・なんでこんな複雑な構文にしたのかわからん



91 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:27:45 ]
個人的にいらない仕様というかなんでわざわざアセンブラとかからステップアップした
はずの言語でこんななの?と思ったのが? :の式

92 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:33:06 ]
const double a = (b < 0) ? 0: b;
?:を使わずに書いてください。

93 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:37:21 ]
>>90
boost::function を使うと簡単になるよ。
#include <boost/function.hpp>

using boost::function;

class foo{};
class baz{};
class hoge{};
class fuga{};

foo piyopiyo(fuga a)
{
return foo();
}

function<foo(fuga)> piyo(baz a,hoge b)
{
return &piyopiyo;
}


int _tmain(int argc, _TCHAR* argv[])
{
function<function<foo(fuga)>(baz,hoge)> bar=&piyo;

function<foo(fuga)> k=bar(baz(),hoge());
k(fuga());

return 0;
}


94 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:38:15 ]
const double a = std::max(0,b);

95 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:39:23 ]
うむw
C/C++が混在してるなw

96 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 15:42:07 ]
C/C++は1だし。

97 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:17:37 ]
NaNかもしれないぞ

98 名前:デフォルトの名無しさん [2009/07/25(土) 19:41:55 ]
名前空間に定義されているクラスを他のクラスで使用するときに
どうすればいいか教えてください。

(ヘッダファイル内)
class String;

class A {
  //...
private:
    String* m_Name;
}

Aというクラスがあり、メンバーとしてString*を持たせるときは、上記のように
class String;と書けばコンパイルが通ります。
もし、Stringが名前空間MyLibの中で定義されているときは、どのようにすればいいのでしょうか。
#include "String.h"
とヘッダをインクルードするしかないのでしょうか。

99 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:45:52 ]
namespace MyLib {
class String;
}

100 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 19:47:12 ]
class A {
  //...
private:
    MyLib::String* m_Name;
}








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<156KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef