スレを勃てるまでもないC/C++の質問はここで 18

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2011/06/06(月) 22:25:18.25
>>951
そうなんですけど生ポインタのほうがシンプルですので、、、
953デフォルトの名無しさん:2011/06/06(月) 22:56:42.84
プログラムの最後でいいならハンドル形式にしてしまうとか。
954デフォルトの名無しさん:2011/06/06(月) 23:59:14.17
スマートポインタだってシンプルじゃねぇか
まあ慣れもあるのかもしれないけど
955デフォルトの名無しさん:2011/06/07(火) 07:58:10.11
GCでいいじゃん
956デフォルトの名無しさん:2011/06/07(火) 08:51:45.34
他の言語でいいじゃん
957デフォルトの名無しさん:2011/06/07(火) 10:58:29.27
すみません、ちょと気になったんですが
C++で構造体やクラスの同名変数のみを自動でコピーするような処理は可能でしょうか?
若干条件付きでも構いませんが、順序はバラバラ(memcpyナシ)でお願いします。

struct A {
int x, y, z;
}
struct B {
int a, x, y;
}

A a;
B b;
autoCopy(a, b); // ← x, yのみコピーされる感じ
958デフォルトの名無しさん:2011/06/07(火) 11:44:39.63
出来ない。
959デフォルトの名無しさん:2011/06/07(火) 12:04:26.97
>>957
template<class A, class B>void autoCopy(A & a, const B & b) {a.x = b.x; a.y = b.y;}
960デフォルトの名無しさん:2011/06/07(火) 12:14:16.38
>>959
同名のメンバー名のリストは与えられないという条件に決まってんだろ。ちっとは頭使え。
961デフォルトの名無しさん:2011/06/07(火) 12:21:38.94
Aを全クラスに継承させれば実質できるんじゃね?w
962デフォルトの名無しさん:2011/06/07(火) 12:51:07.87
>>960
それだったら既に>958で答が出ている。
敢えて次善策を提示しているに決まっているだろう。
ちっとはその身体の上に乗っかってる代物を有効活用したらどうだ?
963デフォルトの名無しさん:2011/06/07(火) 12:58:05.25
>>957
設計が間違ってるからそんな欲求が生まれる
964デフォルトの名無しさん:2011/06/07(火) 13:01:35.72
同名の変数部分をまとめて構造体にすればいい
まとめて一回でコピーできる
965944:2011/06/07(火) 13:19:12.71
>>947
遅れましたが、これを使っていきます。ありがとうございます!
966デフォルトの名無しさん:2011/06/07(火) 14:32:10.20
bccで.tdsや.objを生成しない方法はありますか?
967デフォルトの名無しさん:2011/06/07(火) 14:35:44.11
DBや通信が絡んだりすると、
どうしても一部のメンバ変数のみを送受信したくなると思うのですが、
設計ミスですかそうしたか。
968デフォルトの名無しさん:2011/06/07(火) 14:44:42.83
boost::serialization
969デフォルトの名無しさん:2011/06/07(火) 17:28:13.32
>>960
ヘッダ見ろカス
970デフォルトの名無しさん:2011/06/07(火) 23:00:51.94
すみません。キー入力の常態を知りたくて
www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/com3-2keycodes.html
ここの一覧全ての定数とWPARAMを、if文で==で比較しているのですが

なぜか定義していないA〜Zのアルファベットキーに反応して
Aだと97の値が来て、VK_NUMPAD1(テンキー1)に一致し、
Sだと115の値が来て、VK_F4(F4キー)に一致し、
Dだと100の値が来て、VK_NUMPAD4(テンキー4)に一致してしまいます。

なぜこんな事になるのでしょうか?
971デフォルトの名無しさん:2011/06/07(火) 23:50:31.75
WM_CHARはキャラクタ−コード。
WM_KEYDOWN等は仮想キーコード。
VK_???は仮想キーコード。
なので、

case WM_CHAR:
 if(wParam == 'A') {
  ...
とすれば拾えるハズ
972970:2011/06/08(水) 02:01:02.82
>>971
ご助言を元にいじって、仮想キーを != WM_CHAR で取得する事で解決できました。
勉強になりました。ありがとうございます。
973デフォルトの名無しさん:2011/06/08(水) 11:59:43.70
void func(int n)
{
assert(n>0);
if(!(n>0)) throw func_error(n) ;
//・・・
};

アサーションって運が悪いとデバッグ時に気がつかないかもしれないから(例えばfunc(rand())みたいな場合)
上のようにリリース時のチェックも追加したほうがいいと思うんだが、なぜみんな書かないの?
974 忍法帖【Lv=1,xxxP】 :2011/06/08(水) 12:02:28.20
リリース時もチェックするならなんでassertするの?
975デフォルトの名無しさん:2011/06/08(水) 12:04:08.48
つまりassert不要論
976デフォルトの名無しさん:2011/06/08(水) 12:26:58.45
表示処理なんかでエラーが雪崩れないところ用にlogging_assertみたいなc/c++標準機能が欲しいね
977デフォルトの名無しさん:2011/06/08(水) 12:30:07.19
stderrを表示処理に使うのはいかがなものか
978デフォルトの名無しさん:2011/06/08(水) 13:30:00.24
ZZ型の変数を10進数から16進数にするにはどうすればいいですか??
979 忍法帖【Lv=1,xxxP】 :2011/06/08(水) 13:59:43.82
>>978
変数自体は進法は関係がない。
表示などの目的で16進数に変換したいなら、printf()系で変換するのが手っ取り早い。
980デフォルトの名無しさん:2011/06/08(水) 14:14:44.98
>>979
解答ありがとうございます。
表示目的ではないのですが、sprintfやstringstreamなどで試してみてもZZ型が
16進文字列になりませんでした。
981デフォルトの名無しさん:2011/06/08(水) 14:18:25.27
ZZ型ってNTLとやらの多倍長整数でいいのかな?
NTLにZZ型を扱う文字列関数(printfやitoa相当のもの)がないなら自分で書くしかない
982デフォルトの名無しさん:2011/06/08(水) 14:21:50.77
はい。
やっぱり自分で書くのが一番なんですかね。ありがとうございました。
参考になりました。
983デフォルトの名無しさん:2011/06/08(水) 14:24:18.69
static char a[] = "0123456789ABCDEF";
long n = (long)(zz % 16);
s = a[n] + s;
984デフォルトの名無しさん:2011/06/08(水) 14:34:02.59
今開いてるディスクリプタの一覧を取得する方法
ってありますか?
985デフォルトの名無しさん:2011/06/08(水) 14:40:42.61
>>984 標準的な方法は存在しない
http://d.hatena.ne.jp/ihiroky/20101122/1290409915
986デフォルトの名無しさん:2011/06/08(水) 15:17:13.53
>>985
マジすか。 標準Cライブラリも案外だらしないな・・・
しかたない。 /procの下でも読みます。
987 忍法帖【Lv=1,xxxP】 :2011/06/08(水) 17:03:01.18
>>986
そもそも標準ライブラリはディスクリプタを扱わない。
∵そう言う方法で管理しないシステムで使うことも考慮されているから。
988デフォルトの名無しさん:2011/06/08(水) 17:21:48.39
>>987
あーそういえばそうだったね
低レベルばっかり触ってるからうっかりしてた
989デフォルトの名無しさん:2011/06/08(水) 19:18:04.28
ファイルのアドレスとデータを指定して書き換えたい
ただしかなりファイルが大きいので一部のために全部書き換えることはしたくない
固定長のデータ等扱うのに需要はあると思うけど
どれ使っていいかわからない

990デフォルトの名無しさん:2011/06/08(水) 19:19:43.01
日本語でOK。
991デフォルトの名無しさん:2011/06/08(水) 19:46:47.33
つ[fopen(), fclose(), fseek(), fread(), fwrite()]
992デフォルトの名無しさん:2011/06/08(水) 19:48:16.87
>>989
"r+"でfopen 〜 fseek 〜 fwriteやfprintfで書き込み
fstream 〜 seekp 〜 write や << で書き込み
993デフォルトの名無しさん:2011/06/08(水) 20:05:38.45
>>990
はずかしいね
994デフォルトの名無しさん:2011/06/08(水) 22:03:41.24
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
995デフォルトの名無しさん:2011/06/09(木) 00:20:38.27
(´・ω・`)
996デフォルトの名無しさん:2011/06/09(木) 13:21:49.04
         ♪                    ♪    ρ ♪
♪  ∧__∧.  。∧__∧  .Π∧__∧♪ ο∧__∧  ∧__∧∩))
  Ο´・ω・`) .│´・ω・`)  ┃´・ω・`)  │´・ω・`) ρ・ω・`)|
  (つ   .│ (つ    │ ((つ    > (つ   │ (つ   ./
♪ │   U  (_))) .U  (_))) .│♪(_))) U  (_))..〈
  ((__ノ^(___))   (((_)♪   (((_)    (((_)   ((_)♪

  おいしい ハオチー ボーノ アロイ デリシャス デリシュ〜
997デフォルトの名無しさん:2011/06/09(木) 17:20:16.54
http://codepad.org/DypivQTj
これで自作のswapが呼ばれないのはなぜ?
998デフォルトの名無しさん:2011/06/09(木) 17:24:44.62
>>997
std名前空間に入れていい物って限られてなかったか?
999デフォルトの名無しさん:2011/06/09(木) 17:25:30.37
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
言語規格書にはSIGABRTハンドラはreturnしないと書いてある (キリッ
1000デフォルトの名無しさん:2011/06/09(木) 17:53:26.58
>>997
sortがswap利用してないからじゃね?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。