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


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

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



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

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

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

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


2 名前:デフォルトの名無しさん [2009/02/10(火) 03:24:45 ]
C++のコードから、ファイルをオープンするときに、
ウィンドウを開いてユーザーにディレクトリを選ばせて、そこから
ファイルを開くようにしたいのですが、どう書けばよいですか?
しょぼい質問ですいませんがお願いします


3 名前:デフォルトの名無しさん [2009/02/10(火) 03:35:20 ]
C#だったら簡単だよ。

4 名前:デフォルトの名無しさん [2009/02/10(火) 04:01:04 ]
そんなこといったら全部C#で書けばもっと楽だろうけどなw

5 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 07:43:22 ]
全角空白か 

6 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 09:50:58 ]
他クラス型のメンバをprivateで持つ際、
ヘッダでのクラス宣言時にそのクラスのヘッダまでインクルードして
外に見せているのが違和感あるのですが、これは仕方の無いことなのでしょうか?

それとも、ヘッダでは最初に
class COther;
と宣言だけしておいて、
private:
  COther* m_pOther;
とポインタでメンバを定義して、ヘッダはソース内でインクルードして
実体はコンストラクタでnewするとかの方法のほうが
よく使われるものなのでしょうか?

7 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 10:39:22 ]
>>6
こういう話か?
--OtherClass.h
class OtherClass {
};
--SomeClass.h
#include <OtherClass.h>
class SomeClass {
OtherClass member;
};
--
だとしたら、使う方は#include <SomeClass.h>だけで済むがそれの何が不満なんだ?

8 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 10:41:39 ]
>>6
pimplイディオムだな

9 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 10:53:06 ]
>>7
たとえばクラスをエクスポートするライブラリを作る場合、
そのクラスのメンバに使っているクラスもエクスポートする必要が出てきます。
privateで使っているだけで、利用者側には全く関係無いクラスなのに、
なんでそれらまでエクスポートしなくてはいけないのかと思いました
(カプセル化できてないのではと思いました)。

>>8
この単語は初めて知りました。
さっそく検索してみます。

10 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 12:49:30 ]
基本クラスの純粋仮想メンバ関数を継承クラスで仮想なしで実態を作った場合、
その継承クラスを継承したクラスでオーバーライドすることはもうできないんでしょうか?



11 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 12:54:11 ]
派生クラスでvirtual付けようが付けまいが
基本クラスでvirtualならオーバライドしたものもvirtual

12 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 19:50:17 ]
>>9
インタフェースクラスを作って、
実際にはその実装クラスを new して返す
static メンバ関数を用意する、という手法もある。

// IA.h
class IA {
public:
 static IA* Create();
 virtual ~IA() { }
 virtual void Hoge() = 0;
};

// IA.cpp
#include "IA.h"

class A : public IA {
public:
 virtual void Hoge() { /* ここで実装 */ }
};

IA* IA::Create() { return new A; }

こっちはメンバへのアクセスが楽だという利点と、
public メンバ関数を追加するのが面倒臭いという欠点がある。

13 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:20:51 ]
if( a == b && c == d )
でa == bの時点でもうどっちに分岐するか結果出てると思うんですが、この場合c==d計算されないんですか?
if(a==b){
 if(c==d){}
}
こう書いた方が安全ですか?もしa==bがFalseの場合c==dを評価するとエラーになる場合なんです

14 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:26:08 ]
>>13
C / C++ において && の左辺が偽なら右辺は評価しないことは
保障されてる

一応例外として、 &&演算子がオーバーロードされてればその限りではない

15 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:30:57 ]
どうもです

16 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:37:45 ]
型ごとに処理を書いてるんですが、どうしてもテンプレートで書けそうもありません。
そんな状況ってありえますか?頑張っても無理な場合はあるんでしょうか?
//class A
vector< int> vInt;
vector< double> vDouble;
BOOL flag;

//class B
void func(){
 if(A::flag==0){
  A::vInt.resize(0);
 }else{
  A::vDouble.resize(0);
 }
}

このflag値での分岐内の処理がダブってるのを何とかしたいんです

17 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:39:22 ]
A::flag==0がコンパイル時に決まる条件ではないなら、無理。

18 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 02:48:48 ]
ダブってるコードが大量にあるなら
テンプレート関数にすれば?

19 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 03:06:00 ]
そうすると今度は引数としてどう渡せばいいのかがわからなくなってしまったんです

// class A
if(flag==0){ // .hに書けないので.cpp
 vector< int> vData = new vector<int>(); // new の書き方が不明
}else{
 vector< double> vData = new vector< double>();
}

// class B
template <typename T>void Func(T, vData){
 vData.resize()
}

20 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 03:09:32 ]
はぁ? 16 と 19 意味が全然違ってるジャン



21 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 03:14:08 ]
型ごとに処理って話ならそもそも

template<typename T>
void func(T t)
{
t.resize(0);
}
じゃだめなの?

22 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 03:52:05 ]
class A{
union {
vector <int> _i(10);
vector <double> _d(10);
} u;
int flag; // 0 or 1
template<T> f0(T u);
void f1(){f0(u._i); 〜;};
void f2(){f0(u._d); 〜;};
void (*f[2])() ={ f1, f2};

void pub(){ (*f[flag])();};
}
19 実現はテンプレ関係なしバージョンで十分

23 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 04:08:29 ]
すごいwハイレベルすぎる
ありがとう

24 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 05:29:22 ]
>>22
vectorは共用体に入れられない

25 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 06:17:08 ]
継承の根底クラスポインタを使った振り分け
B→A:B{<int>}, C:B{<double>}
D{B *b; D(f){f?b = new A: b = new B;}; };

26 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 12:04:43 ]
>>25
俺なら D を用意する変わりに factory 作るだろうな。
そんで map<key, factory> みたいなので get して Create()。

27 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:24:46 ]
そもそも実行時の型判断を望んでるのかどうか本人が理解してないのかも
もしかしたらテンプレートクラスで済む話なのかもしれない。

28 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:29:09 ]
つか、フラグで使い分けるような、int配列と double配列を
一つのクラス内に持たせていることが疑問。
設計がおかしい。

29 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:55:48 ]
int func(int a)
{
if(a>10)
a=10;
return a+1;
}
のように引数で渡された変数を変更しても問題ありませんか?

30 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:59:21 ]
>>29
大丈夫



31 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:01:43 ]
>>29
大丈夫ではあるけど、
関数内で二度と a の元の値を使えなくなってしまうので注意。
後になって処理を追加した際に、
途中で値が変更されてるのを忘れて処理を追加して
上手く動かねーとかなるといけないから、
なるべくなら別変数を作った方が好ましいし、
それでも a を変更したいんだ!ってんなら、コメントでも残しておくといい。

32 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:28:26 ]
>>30-31
ありがとうございます

33 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:19:28 ]
int func(int& a, int* b = &a)
{
if(a>10)
a=10;
return *b++;
}


34 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 21:44:16 ]
int func(const int a){ return (a>10)? 10+1: a+1; }

wwww


35 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:05:14 ]
急に過疎ってどうしたんだ?

36 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:29:01 ]
春だからさ・・・・・

37 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 02:10:04 ]
Cとgrassのハイブリッド言語かと思った。

38 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 02:43:26 ]
grass と 常用単語の堺は3文字あたりから?

void fp(int (*s)[8]);
void fr(int& s[8]);

any(){
int s[8];
int sx[32][8];
int* sp[8];
int* sxp[32][8];
int o[16];
enum{a...b=32}x;

fp(&s);
fp(&(sx[x]));
fp(sp);
fp(*(sxp[x]));
fp(&((int*[8])o));
fr(s);
fr(sx[x]);
fr(*sp);
fr(**(sxp[x]));
fr(*((int*[8])o));
}
どっかに考え方が判り易くまとまった資料ない?
正解不正解はコンパイル通してみるまで判らない自分。


39 名前:デフォルトの名無しさん [2009/02/14(土) 03:23:09 ]
windowsアプリケーションなんですが
Borland C Compiler 5.5にて
MAKELONGマクロが警告にひっかかってしまいます。
windef.hの定義を見るに括弧が足りないのが原因のようです。
これは単純にwindef.hのミスですか?BCCのミスですか?私の設定ミスですか?

40 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 07:52:34 ]
>>39
windef.hのミスだね
本家のWinDef.hは括弧が多かった
#define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16))




41 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 07:55:25 ]
調べなおしてみたらVC+2008EEに付属のSDKは括弧が多かったが昔のPlatformSDKのは少なかったわ


42 名前:39 mailto:sage [2009/02/14(土) 11:12:03 ]
>>40-41
ありがとうございます。
MAKELONGを(あとMAKEWORDも)
#undefして括弧増やした#defineしなおしてもいいもんでしょうかね?

43 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 11:43:07 ]
>>42
しなおしてもいいし大元のファイルを修正してもいいし警告無視してもいいよ
簡単にすると( A | B << 16 )ってなるから ( B )に括弧が必要というわけか



44 名前:43 mailto:sage [2009/02/14(土) 11:45:56 ]
( B << 16 )に括弧が必要
の間違いでした

45 名前:39 mailto:sage [2009/02/14(土) 12:34:59 ]
>>43-44
どうもでした。

46 名前:デフォルトの名無しさん [2009/02/15(日) 08:59:26 ]
LPTSTRを使って
char hoge[40];
みたいな固定長の、文字を入れておける場所を定義するのって出来ますか?


47 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 09:13:07 ]
TCHAR s[40];
がいいかな

48 名前:デフォルトの名無しさん [2009/02/15(日) 09:18:16 ]
ありがとうです。
それでできました!


49 名前:デフォルトの名無しさん [2009/02/15(日) 09:24:24 ]
もう一個だけ質問させてください。
_T("ddd");
TEXT("ddd");
これって書き方が違うだけで同じですか?


50 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 09:39:22 ]
同じ。
強いて言うなら、前者はCライブラリの拡張で、後者はWin32。
ちなみに前者のバリエーションで_TEXTもある。



51 名前:デフォルトの名無しさん [2009/02/15(日) 23:26:08 ]
ありがとうございます。なるほど。
TCHARとかLPTSTRとかにあわせて、TEXT("")を使います。


52 名前:デフォルトの名無しさん [2009/02/15(日) 23:33:30 ]
背景とカーソルを同時に表示しようと思うんですが、
その画像をまとめてメモリデバイスコンテキストに選択して、
「最終的に表示する画面」を先に作る方法が分からないので、
どなたか教えていただけないでしょうか。

環境は WinAPIです。

よろしくおねがいします

53 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:09:31 ]
それはカーソルじゃなくてキャレットのことかね?

54 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:45:17 ]
関数の引数に関数を渡すことはできませんか?
処理の途中で指定した関数を入れたいんです。

55 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:46:34 ]
>>54
関数ポインタというのがあってだな

56 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 00:51:08 ]
thx出てきました!

57 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 01:02:45 ]
// class A
void Func(){}
X.pfFunc = Func;

// class X
void (*pfFunc)();
void Shori(void pfFunc()){
(*pfFunc)();

これどうやって引数に渡す時と、使うとき書けばいいですか?



58 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 01:09:27 ]
>>53
すいません言い方が悪かったです

画像2枚だと考えてください
背景の画像と 矢印の画像です。

よろしくおねがいします

59 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 01:51:58 ]
>>58
WinAPIスレにでもどうぞ。

>>57
メンバ関数は普通の関数ポインタとは振る舞いが異なるので注意。
「メンバ関数のポインタ」とでもして、検索してみることをお勧め。

60 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 03:19:29 ]
コンストラクタってパブリックにしないとだめですよね?
newするときアクセスできないとか言われるんですが、内部でよんでくれるんじゃなかったんですか?



61 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 03:53:17 ]
ポインタは使い終わったらNULLしたほうがいいんですか?
NULLしないでポインタを持っていたクラスをdeleteしたらポインタがゴミとして残るんでしょうか?
というかそうしたら変数も解放しなきゃいけないのですか?どうやんお?

62 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:04:37 ]
>>61
NULLするってなんだよ?

63 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:08:33 ]
>>61
どうやんお? でちょっと笑た

ポインタとメモリの動的確保についてもーちょい学ぶべき
NULLするってのはNULL入れるってことかい

64 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:12:26 ]
ポインタはオマエ自身から持つ手綱
データはペットの犬
手綱は他人のペットにも付けられるが そのペットは苦しい。

自分の飼っている犬の手綱はポイチョと捨てると他人に迷惑だが
他人のペットに付けた手綱はポイチョと捨ててもあまり問題にはならない。
他人のペットも譲られて唯一の飼い主がオマエになればオマエに責任が

65 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:22:53 ]
難読Cコンテストを思い出した

66 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:28:14 ]
メンバ関数ポインタは入れる時と使うときクラス名が必要なことがわかりました!
これじゃあライブラリとして使えなく無いですか?
設計を見直せですか?

67 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:29:23 ]
定数へのポインタは渋谷のハチ公に首輪をつけるようなもの
全くの無意味ではないが楽しく一緒に遊んでくれない。

土佐犬にチワワ用の首輪を付けても首じゃなく足首に掛かったりして土佐犬を転ばせたりする。
だからと言ってロデオロープ的な void * で括ってアチコチ引き回したら犬が昇天する場合もある

68 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 04:37:03 ]
やばい
全く集中できなくなった

69 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 05:07:23 ]
関数の中で
static int a = 0;
とした場合このaは関数を抜けても保持されるんでしょうか?
起動時最初の一回しか変数が存在しないことになるんでしょうか?

70 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 05:38:57 ]
>>69
スコープがブロック内に限定されてるだけで、他はグローバル変数と同じと言える

だからアドレスを渡して関数外からアクセスしようが問題ない





71 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 06:06:42 ]
ありがとうございます!!!
>>60>>61>>66
もお願いします!

72 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 06:50:02 ]
構造体の配列を引数に渡して使うにはどうすれば書けばいいでしょうか

structA a[] = { { 1, 2, }, {3, 4,}, };

//ClassX.h
Class* Z;

//ClassX.cpp
Z = new ClassZ();
Z->func(a);

//ClassZ.h
void func(structA bufa);

//ClassZ.cpp
func(structA bufa){
sizeof(bufa);
}

このときsizeofで帰ってくる値はどういう値ですか?

73 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 06:57:12 ]
>>72
structAが何バイトか(C99だとそういいきれないけど別にいいだろう)


配列渡すなら

void func(structA bufa[]);
//ClassZ.cpp
func(structA bufa[]){
sizeof(bufa);
}

とでもすればいい、ただしこれは

void func(structA *bufa);
//ClassZ.cpp
func(structA *bufa){
sizeof(bufa);
}
と等価なのでsizeof(bufa)はどちらもポインタのサイズになる(配列のサイズではない)

74 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:12:22 ]
構造体の各値がintだとすると
{ { 1, 2, }, {3, 4,}, }

4個*4バイト=16バイト
が返るようにするにはどうすればいいですか?

[]付けたんですけど
funcの中で

structA b[];
b = bufa;

としたらstructA[]からstructA[]に変換できませんとでるんですがこれはどうなおせばいいでしょうか

75 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:24:43 ]
structA b[100];
bに代入はできない
b[0] = とかはできるけど


76 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:27:03 ]
>>66
C# の delegate を参考にしてみれ。

class delegate {
public:
 virtual ~delegate() { }
 virtual void operator()() = 0;
};

template <typename T>
class delegateT : public delegate {
public:
 typedef void (T::*Mfn)();
 delegateT(T* obj, Mfn mfn) : m_obj(obj), m_mfn(mfn) { }
 virtual void operator()() { (m_obj->*m_mfn)(); }
private:
 T* m_obj;
 Mfn m_mfn;
};

77 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 07:31:00 ]
boost::bind.hpp
boost::function.hpp
を使うとか


78 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 10:57:01 ]
>>75
C++でも出来ないとこってあるんですね
サイズは送り元で計算して引数は増えますが一緒におくることにしました。
受取側の関数で構造体の配列変数を除くと1つ目の構造体しか表示確認できなかったんですが、
サイズを添え字にして強引?に全配列をプログラム実行の中で処理できました。
が、これ保障されてますか?安心してこういう使い方して大丈夫なんでしょうか?

79 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:11:20 ]
C#の中のコード全然意味わかりません
boost調べたら簡単にできました。
ありがとうです!

//classA
CC* pC;
CB* pB;
pB->Func(bind(&CC::Update, ref(pC)));

//classB
void CB::Func(function<void ()> f_buf)
{
f_buf();
}

// classC
void CC::Update(){}

80 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:38:17 ]
いややっぱりなにも進展してませんでした
function<void ()> f_buf

function<int ()> f_buf
だったり
function<bool ()> f_buf
だったりした場合、汎用ライブラリにしたとして、使うたびに修正しないとだめじゃないですか?
メンバ関数ポインタと結局同じなことに気づきました・・・



81 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:39:55 ]
operator()()
これはどういう意味なんでしょうか

82 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 12:49:04 ]
>>81
関数オブジェクトでぐぐったら使い方含めてわかるかもよ

83 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:16:23 ]
>>60
こういう風にnewとprivateなコンストラクタを組み合わせる技法は存在する。
class Hoge
{
public:
static Hoge* Craete(int x) {return new Hoge(x);}
private:
Hoge(int);
}

84 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:19:07 ]
出来そうな気がしてきました。
実行したい処理を()演算子の中に作ったクラスを型にした変数を引数として渡せば、
クラスの変数();
とすれば処理が実行されるということですね
ありがとうございました。

85 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 13:20:31 ]
>>80
実は、function<int ()>型やfunction<bool ()>型からfunction<void ()>型へ変換できる。
戻り値を見ないなら全部function<void ()>型にすればいい。

86 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 16:24:20 ]
sprintfの逆のことをしたいのですがそういう関数なかったでしょうか?
char str[]="年齢は10,性別は男";
例えば、(str,"年齢は%d,性別は%s",age,sex)の引数が与えられると
age=10,sex=男が得られるようにする関数です。
よろしくお願いします。

87 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 16:26:24 ]
sscanf のこと?

88 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 16:40:27 ]
>>87
それです。^^;
あったような気がしていたのですがprintが
入っている名前の関数だと思い込んで探していました。
助かりました。ありがとうございました。

89 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 11:39:57 ]
コールバック関数が今だに理解できないです。教えてください。

90 名前:43 mailto:sage [2009/02/18(水) 11:43:30 ]
>>89
関数ポインタはわかるか



91 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:00:21 ]
わかります。
void Func(){}
void * f = Func;
(*f)();

92 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:03:45 ]
オブジェクトを作成するアプリケーションのインスタンスハンドルが必要だとヘルプに書いてあるんですが
この場合thisを入れればいいんですか?

93 名前:43 mailto:sage [2009/02/18(水) 12:22:54 ]
>>91
コールバック関数のポインタを引数にして渡す
#include <stdio.h>

/* callback用関数 1*/
int add(int a, int b)
{
return a+b;
}
/* callback用関数 2*/
int sub(int a, int b)
{
return a-b;
}
void func(int (*callback)(int, int))
{
int x = callback(1, 2);
printf("%d\n", x);
}
int main(void)
{
/* "addへコールバックしてね" */
func(add);
/* "subへコールバックしてね" */
func(sub);
return 0;
}


94 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:26:57 ]
>>92
状況によるだろう。
でもハンドルと書いてあるからthisはないと思うよ。
なんとなく、hInstanceいれるとこみたいだが。

95 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:38:56 ]
>>93
ありがとうです!
その場合CALLBACKがつくのはどれなんでしょうか
メンバ関数もコールバックとして渡せるんですか?

96 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 12:41:45 ]
Win32アプリの
LRESULT CALLBACK WndProc
はまた別物ですか?

97 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:22:14 ]
WaitForSingleObjectは普通マルチスレッドで使うんですよね?
勝手に別スレッドで待機して制御は返す仕組みじゃないですよね?

98 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:25:43 ]
まあそうだが、シングルスレッドでもオブジェクトがシグナル状態か確認する時も使う。

99 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:43:22 ]
>>96
CALLBACKがどう#defineされてるか見てみるといい

100 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 14:49:12 ]
gdb 用のGUI ツールお勧め教えて
class 関連 CUI じゃツライす








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

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

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