トップページ⇒tech
1001コメント330KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/05/14(水) 01:00:02
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.53【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1208989385/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
06886862008/06/05(木) 00:32:49
>>687
なるほど。
型 T がポインタやクラス(特に自らリソースを確保するクラス)であったような時
メモリリークを引き起こす可能性があるわけですね。

一方、型 T が int や double であった場合には
オブジェクトが使っているメモリ領域は
まさに deallocate で削除される領域なので問題はおきない
と考えてよろしいでしょうか?
0689デフォルトの名無しさん2008/06/05(木) 01:15:19
まあね。でも、テンプレートの場合は言わずもがな、
テンプレートを使わない場合でもコードが入り組んでくると
ほにゃらら_tみたいな、実態が組み込み型なんだかクラスなんだか
後で組み込み型からクラスに変更されるかも知れないような怪しいtypedefが出てくるので、
POD型の時にはデストラクタを呼ばないようなテンプレートを書いておいて
call_destructors<T>(begin, end);
みたいな感じで必ず記述しておいたほうが良いと思うけど。
0690デフォルトの名無しさん2008/06/05(木) 01:23:05
podかどうか判定する演算子とかあったっけ?
0691デフォルトの名無しさん2008/06/05(木) 01:29:26
Boost使うとか出来る範囲で自分で書くとか、非標準だけど__is_podとか。
06926862008/06/05(木) 01:35:29
>>689
ありがとうございます。納得しました。
0693デフォルトの名無しさん2008/06/05(木) 12:44:52
クラスでいきなり詰まりました。
VC++2008EEで独自のダイアログを表示するクラスを作ったのですが、メンバ関数からDialogBox()する時に同じメンバ関数のダイアログプロシージャを呼ぶ方法が良く分りません。

DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), g_hWnd, hoge::MsgBox);
↓
error C3867: 'hoge::MsgBox: 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&hoge::MsgBox' を使用してください

その通り書き換えてもキャスト出来ない旨のエラーが出ますし、ヘルプの凡例には該当するものがなくて対処出来ません。
クラスを使わなければ表示出来るのですが、何が原因でしょうか。
0694デフォルトの名無しさん2008/06/05(木) 12:47:31
this->MsgBox
0695デフォルトの名無しさん2008/06/05(木) 12:55:44
>>693
MsgBoxが非staticメンバ関数であることが原因
非staticメンバ関数にはthisポインタという隠れた引数があるので普通の関数と同等には扱えない

そういう場合には普通の関数かstaticメンバ関数を渡しておき、
何かのトリックを使ってどこかからthisポインタを取り出し、それを使ってメンバ関数を呼ぶ
0696デフォルトの名無しさん2008/06/05(木) 13:36:08
>>694-695
回答ありがとうございます。

処理が複雑になりそうなので(普通の関数とローカル変数を使えば出来そうな気もしますが)、現状ではダイアログプロシージャをクラスに含めない事にしました。
本当にありがとうございました。
0697デフォルトの名無しさん2008/06/05(木) 16:16:26
>>691
あー__is_podか。
大分前にispodって書いてる人がいて、それで検索してたんだけど、
どうりで見つからなかったわけだ。
0698デフォルトの名無しさん2008/06/05(木) 16:20:48
C で日本語のオートマトンを書きたいのですがヒントをくれませんか
0699デフォルトの名無しさん2008/06/05(木) 16:36:34
>>698
yacc/lex
0700デフォルトの名無しさん2008/06/05(木) 20:26:23
>>689
> POD型の時にはデストラクタを呼ばないような
それ、まさにallocatorのdestroy。
正確に言うとx.~T()の構文はPODでもエラーにならず、何の効果も起きないだけ。

ちなみに、こんなコードも合法のはず。
int main()
{
typedef int t;
t i;
i.~t();
}
0701デフォルトの名無しさん2008/06/06(金) 14:37:58
タスクトレイにメッセージバルーンを任意のタイミングで表示させたいんですが
やり方が分かりません。

アプリケーションのアイコンをタスクトレイに表示させた後、そのアイコン上に
マウスを移動させた場合に指定したメッセージを表示させる事は出来ます。
これを、マウスをアイコン上に移動させなくてもイベントが発生した際に
バルーンを表示させるようにしたいのですが・・・。
NIM_SETFOCUSを使えば似た事が可能なのですが、NIM_SETFOCUSを利用すると
ウィンドウのフォーカスがアイコンに持っていかれてしまうので不便です。
別のやり方は無いでしょうか?

伝えにくいので以下に現状のプログラムを示します。

NOTIFYICONDATA g_nid;

case WM_CREATE:
ZeroMemory ( &g_nid, sizeof( NOTIFYICONDATA ));
sprintf( g_nid.szTip, "TESTメッセージです" );
g_nid.cbSize = sizeof( NOTIFYICONDATA );
g_nid.hWnd = hWnd;
g_nid.uID = TRAY_ID;
g_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
g_nid.uCallbackMessage = MYWM_NOTIFYICON;

Shell_NotifyIcon( NIM_ADD, &g_nid );
break;

case WM_MYEVENT://任意のタイミングでメッセージを表示
Shell_NotifyIcon( NIM_SETFOCUS , &g_nid );//フォーカスを割り当てる、これで一応バルーンは表示される
break;
0702デフォルトの名無しさん2008/06/06(金) 20:35:14
ググれば分かるきがする。
0703デフォルトの名無しさん2008/06/07(土) 08:07:02
win9x、BCCです。
以下のプログラムで構造体を初期化するには
どう記述すればいいでしょうか。

括弧のつけ方をいろいろ変えているんですけど、
初期化の一部だけに括弧が付いているとか、
宣言構文エラーとか出てうまくいきません。

typedef struct {
int a;
int b;
}FOO_STRUCT;
typedef struct {
FOO_STRUCT foo[2];
}HOGE_STRUCT;

int main(void)
{
HOGE_STRUCT hoge = {{0, 1}, {2, 3}};
return 0;
}
0704デフォルトの名無しさん2008/06/07(土) 08:32:03
>>703
HOGE_STRUCT hoge = {{{0, 1}, {2, 3}}};
0705デフォルトの名無しさん2008/06/07(土) 08:45:48
>>704
通りました。ありがとうございます。
0706デフォルトの名無しさん2008/06/07(土) 13:44:39
自動変数は解放の必要が無いですが、
なぜ calloc等で動的確保した変数には、
解放のコードを書かないといけないのでしょうか、
逆に自動変数はなぜ解放のコードが不要なのでしょうか。
0707デフォルトの名無しさん2008/06/07(土) 13:57:31
メモリはすべて確保/解放しなければなりません
自動変数は自動的に確保/解放されるから「自動」変数なのです
0708デフォルトの名無しさん2008/06/07(土) 14:13:32
>>707
ありがとうございます、初歩的な質問ですみませんでした
0709デフォルトの名無しさん2008/06/07(土) 14:18:38
行列の乗算を演算子オーバーロードで表現したいのですが
結合規則の問題で悩んでます。

|A| = |B|*|C|*|D|の式をプログラムで表現するときに、

MATRIX matA, matB, matC, matD;

matA = matB * matC * matD;

と書いて表現させたいのですが、普通にやると
|A| = (|B|*|C|)*|D|
と認識してしまいます。
()などを使わずに
右辺を右から左の順序で乗算させる方法が何かありませんでしょうか
0710デフォルトの名無しさん2008/06/07(土) 14:26:29
同じ優先順位の二項演算子は左から順に組にすることになってるので、
結合律が成り立たない場合は括弧で括ってください。
0711デフォルトの名無しさん2008/06/07(土) 14:30:13
>>710
ありがとうございました。
それでやろうと思います。
0712デフォルトの名無しさん2008/06/07(土) 14:31:44
行列の積って結合則なかった?
(B×C)×D = B×(C×D) でしょ?
どっちでも一緒じゃん?
0713デフォルトの名無しさん2008/06/07(土) 14:33:05
>>712
結合順によって計算量が変わる可能性は高い
0714デフォルトの名無しさん2008/06/07(土) 14:55:30
>>712
行列演算で×を使うと意味が変わっちゃうよ
0715デフォルトの名無しさん2008/06/07(土) 15:14:34
直積には ⊗ を使わなかったっけ?
0716デフォルトの名無しさん2008/06/07(土) 15:28:01
行列は内積だろうが外積だろうが掛ける順番が変わっても問題ない。
ただ外積は順番によっては計算量が著しく変わる。内積はどんな順番でも行 * 列 * 項の数で一定
0717デフォルトの名無しさん2008/06/07(土) 15:50:05
計算量を考えるのであれば
そもそも行列積に operator* を使わない方がいいと思うが。
0718デフォルトの名無しさん2008/06/07(土) 15:51:07
>>716
A 100x100
B 100x100
C 10x100

(AB)C
100x100x100+100x10x100=1100000

A(BC)
100x10x100+100x10x100=200000
0719デフォルトの名無しさん2008/06/07(土) 16:00:33
行列の内積って Σij AijBij のことか?
0720デフォルトの名無しさん2008/06/07(土) 16:16:16
フロベニアス積だっけ?
0721デフォルトの名無しさん2008/06/07(土) 16:20:51
>>712
ない。
0722デフォルトの名無しさん2008/06/07(土) 16:27:47
>>719-720
それならスカラーになるから>>716の言ってるのはアダマール積のことだと思う。
0723デフォルトの名無しさん2008/06/07(土) 16:54:15
そこでシューア積ですよ
0724デフォルトの名無しさん2008/06/07(土) 17:07:16
それって内積と呼ぶんだろうか?
そして行列の外積って何を表しているんだろう?
0725デフォルトの名無しさん2008/06/07(土) 17:09:18
間違えた。
Σij AijBji のことか? と聞こうとしたんだった。
要するに tr A^T B
0726デフォルトの名無しさん2008/06/07(土) 19:08:48
外積とは、ふたつのオペランドベクトルに対して直交したベクトルを返す演算の事
   _,,....,,_  _人人人人人人人人人人人人人人人_
-''":::::::::::::`''>   ゆっくりしていってね!!!  <
ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
 |::::::;ノ´ ̄\:::::::::::\_,. -‐ァ     __   _____   ______
 |::::ノ   ヽ、ヽr-r'"´  (.__    ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、
_,.!イ_  _,.ヘーァ'二ハ二ヽ、へ,_7   'r ´          ヽ、ン、
::::::rー''7コ-‐'"´    ;  ', `ヽ/`7 ,'==─-      -─==', i
r-'ァ'"´/  /! ハ  ハ  !  iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i |
!イ´ ,' | /__,.!/ V 、!__ハ  ,' ,ゝ レリイi (ヒ_]     ヒ_ン ).| .|、i .||
`!  !/レi' (ヒ_]     ヒ_ン レ'i ノ   !Y!""  ,___,   "" 「 !ノ i |
,'  ノ   !'"    ,___,  "' i .レ'    L.',.   ヽ _ン    L」 ノ| .|
 (  ,ハ    ヽ _ン   人!      | ||ヽ、       ,イ| ||イ| /
,.ヘ,)、  )>,、 _____, ,.イ  ハ    レ ル` ー--─ ´ルレ レ´
0727デフォルトの名無しさん2008/06/07(土) 19:09:23
すみませんゆっくりAAは誤爆です無視してください
0728デフォルトの名無しさん2008/06/07(土) 19:12:52
>>724
電磁気の話だと物理的意味があるよ
0729デフォルトの名無しさん2008/06/07(土) 19:15:48
>>724
行列でouter productって言ったらテンソル積のことじゃね。
0730デフォルトの名無しさん2008/06/07(土) 19:19:10
マーチングキューブ法について質問があります。
http://www.jspf.or.jp/cd2/7505cd/75-5/sakagami/2-11.html
などのサイトに乗っている15種類の状態からでは2^8=256通りではなく254通りしか
生成できません

具体的には立方体のうち向かい会う2面のそれぞれ対角線上の格子点が垂直をなすように
ON(OFF)になっているケースの2通りの状態が含まれていません。
どこのサイトを見てもこのことに関する情報はありませんでした。

マーチングキューブ法ではこのような状態は異常として無視して描画しないのでしょうか?
しかしどこを見ても必ず「256通り」の記述があるのがどうにも・・
0731デフォルトの名無しさん2008/06/07(土) 19:24:10
外積にそんなに呼び名があるなんて知らなかった・・・
おまいら頭だけはでかいんだな
0732デフォルトの名無しさん2008/06/07(土) 19:25:29
ソースも貼らずに質問とな?
0733デフォルトの名無しさん2008/06/07(土) 19:28:26
>>730
14通りのうち表の左上が0。
そしてトポロジーにより0の状態が2つある。
よって2^256 - 2 = 254
0734デフォルトの名無しさん2008/06/07(土) 19:34:22
次の式を使って自然対数の底の値を求めよ
1+Σ(1/i!) (1〜10まで)

やってみたのですが分かりません。
何がおかしいでしょうか?
#include <stdio.h>


main(){
int i,fact;
double j,e;

fact=1;
i=1;

while(i<=10){
fact=fact*i;
j=1/fact;
i=i+1;

}
e=1+j;



printf("e=%lf\n",e);
}
0735デフォルトの名無しさん2008/06/07(土) 19:36:10
j=1.0/fact;
0736デフォルトの名無しさん2008/06/07(土) 19:36:13
>>734
とりあえず
1/fact;
これの結果は切り捨てになるぞ?
0.いくつとかにはならずに
0737デフォルトの名無しさん2008/06/07(土) 19:37:14
#include <stdio.h>


main(){
int i,fact;
double j = 0.0,e;
fact=1;
i=1;
while(i<=10){
fact=fact*i;
j+=1.0/fact;
i=i+1;
}
e=1+j;
printf("e=%lf\n",e);
}
0738デフォルトの名無しさん2008/06/07(土) 19:38:48
すいません参考にしていたサイトが間違っていたことに今気が付きました
13番目の状態が>>730で欠落している2箇所にあたります

ポリゴンは正しいけど黒丸の表示位置がそれとずれていました
0739デフォルトの名無しさん2008/06/07(土) 19:46:36
>>735
doubleで定義すると1.0としないとだめなんですか?

>>736
なぜですか?

>>737
なぜそういう風にしないといけないのか教えてもらいたいのですが・・・
0740デフォルトの名無しさん2008/06/07(土) 19:50:15
doubleでぐぐれ
0741デフォルトの名無しさん2008/06/07(土) 19:53:34
>>739
整数同士の演算結果は整数だから、そんでその結果をdoubleにして代入だから
暗黙の型変換とかでぐぐれ
0742デフォルトの名無しさん2008/06/07(土) 20:04:23
>>740
>>741
ありがとう
0743デフォルトの名無しさん2008/06/07(土) 21:25:22
>>740
doubleだけだとちょっと辛いだろw
0744デフォルトの名無しさん2008/06/07(土) 21:27:38
そこから学べばOK
0745デフォルトの名無しさん2008/06/07(土) 21:30:34
いっそgnu mp使っちゃおうぜ!!
0746デフォルトの名無しさん2008/06/08(日) 09:04:59
[1]プログラミング
[2]問題文
三つの整数値を読み込んで、それらの値が全て等しければ、「三つの値は等しいです。」と、どれか二つの値が等しければ、「二つの値が等しいです。」と、そうでなければ、「三つの値は異なります。」と表示するプログラムを作る。
[3-1]windows
[3-2]gcc
[3-3]C言語
[4]明後日まで。
[5]if文を使って下さい。お願いいたします。

0747デフォルトの名無しさん2008/06/08(日) 09:07:45
>>746
スレ違いです

こちらへどうぞw
http://pc11.2ch.net/test/read.cgi/tech/1211980711/944
0748デフォルトの名無しさん2008/06/08(日) 09:19:33
あまりの最適化された回答に理解できなかったらしいな。w
0749デフォルトの名無しさん2008/06/08(日) 10:20:13
>>746-747
[5]が増えてるw
0750デフォルトの名無しさん2008/06/08(日) 12:18:02
ひまわりすら挫折した初心者です
ttp://moyashi.air-nifty.com/hitori/2006/09/gsplayer225_0036.html
を読んでGSPlayerをビルドしようとしたんですが上手くいきません
そこに書いてあるようにVisual C++ 4.0などを入れてファイルを開いたら固まるので
Visual C++ 2005 Express EditionとPlatform SDKを入れてみたんですが上手くいきません
他に何かインストールしなきゃダメな物があるんでしょうか?
0751デフォルトの名無しさん2008/06/08(日) 12:21:51
書き忘れました
目的はWin32版のビルドです
0752デフォルトの名無しさん2008/06/08(日) 12:39:54
VC++ 4.0 じゃなくて eVC++ 4.0 のようだけど
0753デフォルトの名無しさん2008/06/08(日) 12:40:10
>>750
上手くいきません、だけじゃ回答の仕様が無い。
何をやって、どういう状況になったか明確に説明せずに、回答者側にそれを想像することを求めている?

そもそも、そのブログに
>eVC++ 4.0、eVC++ 4.0のサービスパッチ、PPC2003 SDK、PPC2003のエミュレータを順次インストールすればOK。
と書いてあるのに、勝手にVC++2005を使って上手くいかないと言われても。
VC++2005の他に何かインストールしなければいけないのではなく、上記のものを正しくインストールすべき。

>Visual C++ 4.0などを入れてファイルを開いたら固まるので
これについてはどこか他スレで。
0754デフォルトの名無しさん2008/06/08(日) 12:43:34
その他のプラットフォームについて

自分では試せないので、上記を参考に試してみてください。
現在GSPlayer2は「Windows Mobile 2005」にも対応してます。この場合は、「Visual Studio 2005 Standard Edition」でビルドするんですかね。
相応のSDKも必要になるでしょう。

ただ、上記の手順で作ったバイナリは、H/PC系を除き、各種WMで動くと思います。


をやろうとしたんだと思う。多分。
07557502008/06/08(日) 13:02:52
>>753
>VC++ 4.0、eVC++ 4.0のサービスパッチ、PPC2003 SDK、PPC2003のエミュレータを順次インストール
はやったのですが固まってしまうので下の方に書いてあるVisual Studio 2005 Standard Editionを入れました。
libmad.vcwを開くとあるのですが見つからないので、libmad.dspをダブルクリックで開くと
「Visual C++ プロジェクト形式に変換されなければなりません」と出たので変換して開いてソリューションのビルドをすると1 失敗となってしまいます

>>754
それをやろうとしたんですが上手くいきませんでした
>相応のSDKも必要
とあるので何かインストールしなければならない物があるのかと思ったのですが見当違いでしょうか
0756デフォルトの名無しさん2008/06/08(日) 13:19:11
初心者は何故、初期状態で動かす努力をしないのだろう。
勝手に、インクルードのパス変えてみたりフォルダの構造変えてみたり・・・
聴いてみれば、あれがなかったからかえてみた。とか、パスを通すの面倒だからコピーしたとか・・・・

どんな経験者でも、他人が作ったプロジェクトのどこにノウハウが隠れているか分からないものを変更するのは細心の注意が必要なのにな。
0757デフォルトの名無しさん2008/06/08(日) 13:37:33
>>755
>ソリューションのビルドをすると1 失敗となってしまいます
ビルドエラー時にもっと詳細なメッセージが出ているはずだけど、それについて調べる努力はした?
自分にとって意味不明なメッセージはスルー?
>>753も書いているけど、失敗というだけでなくもっと詳細な情報を出さなければ回答してもらえないよ。
たぶんこのスレで聞く様な問題ではなく、visual stdioとかそっち系を探すべきだとは思うけど。
07587502008/06/08(日) 13:54:49
>>757
すみません
エラーが多いので環境自体が整ってないのかと思っていました。
長いのでttp://uproda.2ch-library.com/src/lib030582.txt
スレ違いのようでしたら移ります。
0759デフォルトの名無しさん2008/06/08(日) 14:13:53
☆2005はやめて2008入れようね☆
0760デフォルトの名無しさん2008/06/08(日) 14:18:09
>>758 をまとめてみた

d:\gsplayer\libmad\libmad.c(2) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
0761デフォルトの名無しさん2008/06/08(日) 15:42:11
char a[] ="str";
++a; /* lvalue required as increment operand */

printf("%p", &a);でアドレスは取れるのにもかかわらず、このaは左辺値じゃないんですか?
0762デフォルトの名無しさん2008/06/08(日) 15:43:04
配列型ってインクリメントしていいのか?
0763デフォルトの名無しさん2008/06/08(日) 15:49:24
>>761
lvalueでもmodifiableなものとそうでないものがある。
その例のほかに、たとえばconst修飾されたlvalueはmodifiableでない。
07647612008/06/08(日) 16:00:36
>>762
代入が不可能である時点でインクリメントが出来ないんだろうなという気はするんですが、
>lvalue required as increment operand
というような表現なんで不思議に思ったのですよ

>>763
じゃあこのエラーメッセージは罠で、
aが変更不可能な変数であることがポイントって事なんでしょうか?
0765デフォルトの名無しさん2008/06/08(日) 16:06:37
>>761
char a[] は、
char* const a だと思っておけ。
0766デフォルトの名無しさん2008/06/08(日) 16:14:06
ISO/IEC 14882 5.19-4
The pointer shall be created explicitly, using the unary & operator, or
implicitly using a non-type template parameter of pointer type, or using
an expression of array (4.2) or function (4.3) type.

このルールで右辺値じゃないけど&でポインタをとれる
0767デフォルトの名無しさん2008/06/08(日) 16:15:13
>>764
そもそもa[0]などがlvalueであって、a自体はlvalueではないだろ。
&演算子が使えるかどうかはlvalueであることとは無関係では?
0768デフォルトの名無しさん2008/06/08(日) 16:18:32
aは変更可能な左辺値って奴だろう
0769デフォルトの名無しさん2008/06/08(日) 16:18:44
>>761
lvalue の解釈を「アドレスが取れるもの」とせずに、素直に「代入式の左辺に置けるもの」と
考えておけば何も問題ないエラーメッセージじゃないか?
07707682008/06/08(日) 16:19:34
すまん逆だ
modifiableでないlvalueだ
0771デフォルトの名無しさん2008/06/08(日) 16:25:07
関数だって左辺値だしな。確か。
左辺値なら何でも代入可能とは限らない。
0772デフォルトの名無しさん2008/06/08(日) 17:58:07
#include <iostream>
#include <bitset>
#include <boost/lambda/lambda.hpp>
#include <boost/cstdint.hpp>
int main() {
double d=1.0;
std::bitset<64> b(*((boost::int64_t *) &d));
namespace bl=boost::lambda;
for (int i=0; i < b.size(); ++i)
std::cout << b[i];
}

doubleのビット表現をbitsetにぶちこむ為に一時変数使ってポインタのキャストしてるんですが
こういう面倒臭いことせずに
std::bitset<64> b( foo(1.0) );
みたいに一発でできる方法ってないですかね?
0773デフォルトの名無しさん2008/06/08(日) 18:16:38
std::bitsetって確かstd::stringを引数に持つコンストラクタあったろ。

std::string("0110110101")みたいな
0774デフォルトの名無しさん2008/06/08(日) 18:48:03
>>772
一時変数を使うほうが分かりやすいと思うぞ。
reinterpret_cast<boost::uint64_t const&>(static_cast<double const&>(1.0))
そもそも標準のbitsetでは、コンストラクタが
773も言っているstringを取るやつと、unsigned longを取るやつ、
あとコピーコンストラクタしかないからうまくいかなくても知らないぞ。
0775デフォルトの名無しさん2008/06/08(日) 19:00:00
>>772
double型を引数としてビット表現を文字列表記したstd::string型を返す関数fooを用意すれば
>std::bitset<64> b( foo(1.0) );
という風にかけるんじゃない?

以下は適当に書いてみた。テストもコンパイルもしてない。

template<typename T>
std::string foo(T d)
{
char buf[sizeof(T)];
for (int i= 0 ; i < sizeof(T) ; i++)
{
buf[i] = *(reinterpret_cast<char*>(&d))[i/8] & (0x80 >> i%8);
}
return std::string(buf);
}
0776デフォルトの名無しさん2008/06/08(日) 19:00:53
× *(reinterpret_cast<char*>(&d))
○ (reinterpret_cast<char*>(&d))
0777デフォルトの名無しさん2008/06/08(日) 20:13:53
めちゃくちゃだけど雰囲気は伝わった。
0778デフォルトの名無しさん2008/06/08(日) 20:16:04
そういやoperatorによるキャストって、C++のキャスト演算子でも使えるの?static_castあたりか
0779デフォルトの名無しさん2008/06/08(日) 20:30:49
当然使える
0780デフォルトの名無しさん2008/06/08(日) 21:35:47
しかもif()はboolを引数に取る関数です。
0781デフォルトの名無しさん2008/06/08(日) 23:46:00
じゃぁifのオーバーライドって可能なのか?
0782デフォルトの名無しさん2008/06/08(日) 23:47:52
関数じゃねえよw
0783デフォルトの名無しさん2008/06/08(日) 23:50:17
俺、catchをオーバーライドしてくるわw
0784デフォルトの名無しさん2008/06/08(日) 23:51:52
さあ while をオーバーロードする作業に戻るんだ
0785デフォルトの名無しさん2008/06/09(月) 00:02:36
部長それは昨日やりました
0786デフォルトの名無しさん2008/06/09(月) 00:10:19
#define while myfunction
0787デフォルトの名無しさん2008/06/09(月) 00:18:27
#define wife my_fiction
■ このスレッドは過去ログ倉庫に格納されています