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


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

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



1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.49【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1203478421/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

75 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:59:41 ]
>>72
書き終わった直後に気付いて書いてみたのですが根本的な原因は別にあるようでした。
>>74
そうみたいです!。ありがとうございます。

>>71
これに、文字セットをマルチバイトにしてみたところ。うまくいったので、これをベースにして、考えているプログラムにしてみたいと思います。

みなさんお付き合い頂いてありがとうございました。

76 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 15:06:52 ]
>>63
>unsigned char* outBuf = (unsigned char*)malloc(sizeof(lpszInputStr));

俺unix屋だから windows のこと詳しくないけど
lpszInputStr は LPTSTR だからポインタだと思うよ。
上のコードのしていることは文字列の分ではなく
ポインタのサイズの分をmallocで確保している。多分4バイトくらい。

まず文字列のバイト数を正しく求めることから始めないといけないんじゃないかな。
size_t size_of_in = sizeof(TCHAR) * (lstrlen(lpszInputStr)+1); // NUL 文字に+1文字分

あと outBuf には暗号化されたバイナリが入るだろうから
printf("%S") ではうまく表示されないと思うよ。バイナリで扱わないと。
他にも暗号化単位やバイトオーダーなども問題になるかもしれないよ。

77 名前:63 mailto:sage [2008/02/29(金) 16:02:41 ]
>>76
ども、ありがとうございます。
PHPやASPな人間なもんで、厳密な型変換やったことないんでさっぱりです。
バイナリを文字列(1-9,a-z.A-Z)に戻すのは、どうすればいいんでしょうか。

78 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:04:03 ]
newってそんなに遅いの?

79 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:08:03 ]
その程度のオーバーヘッドも看過できないような状況では十分に「遅い」。

80 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:21:26 ]
まぁ、何を作ってるか、によるよね。
趣味でLisp方言作ってたときは、operator new()を工夫しただけで全体の動作が3割速くなったし。

81 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 16:33:06 ]
>>79
boost::Poolのほうが断然速かった。

82 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 17:23:19 ]
>>78
メモリマネージャ次第じゃね?
Windowsに限ってもVCとBCBじゃnewでもメモリ確保の仕方違うし。

83 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:15:19 ]
newを忌避しすぎるのも意味が無い。「まだ最適化するな」。



84 名前:デフォルトの名無しさん [2008/03/01(土) 01:01:15 ]
初期化方法おしえてください 全部通りません

vector<int> x={1,2,3};

vector<int> x(3,{1,2,3});

vector<int> x({1,2,3});

85 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:04:48 ]
>>84
static int const initial_x = {1,2,3};
vector<int> x(&initial_x[0], &initial_x[3]);

86 名前:85 mailto:sage [2008/03/01(土) 01:05:36 ]
ごめん。 [] が抜けてた。
static int const initial_x[] = {1,2,3};

87 名前:デフォルトの名無しさん [2008/03/01(土) 01:08:49 ]
そういうやり方しかないですか・・・そしたらint x[]={1,2,3}ですませます
すみません

88 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:16:29 ]
#include <boost/assign/std/vector.hpp>
...
vector<int> v;
v += 3, 1, 4;

89 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:16:34 ]
boost::assignとか

90 名前:89 mailto:sage [2008/03/01(土) 01:16:55 ]
ごめんリロードしてなかった

91 名前:デフォルトの名無しさん [2008/03/01(土) 01:21:24 ]
vectorに関数追加する方法ありませんか?
x={1,2,3}の代入を可能にする関数です

92 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:23:37 ]
配列数が8000ぐらいあるものでそれぞれが4つくらいのアイテムを持っている場合、
vectorやらmapやらを使いたいんですが、メモリ消費や処理速度的にどのようにしたらよいでしょうか?

ちなみに8000くらいあるほうは歯抜けで番号が記録されていてコール元から頻繁にアイテムを求めてきます。(ユニークキー)
4つくらいのアイテムの方は可変になってしまうのでそれぞれをvectorにしようかと思ったのですが、
消費メモリが大きくなりそうだったので悩んでいます。

93 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:23:45 ]
>>91
継承すれば



94 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:24:00 ]
ありません

95 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:35:05 ]
>>92
「なりそう」で悩む前に素直に実装してみて、実際のメモリ消費量見てから考えるのがいいよ。

96 名前:デフォルトの名無しさん [2008/03/01(土) 01:44:11 ]
vec x(10, 10, 10, 0);
で初期値0の3次配列を定義できるようにするには、どう書けばいいですか?
int 型限定でよいです 4次や5次もしたいです

97 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:45:17 ]
>91
無理。C++0x を待て。

98 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:46:56 ]
>>95
ありがとうございます。
ちょっと試してみます。
業務で初めてC++使っているので勉強の毎日です。><

99 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:53:25 ]
>>96
コンストラクタ多重定義しとけば。

100 名前:デフォルトの名無しさん [2008/03/01(土) 01:56:57 ]
このように書けば可変個の引数をとれますが、内部の型が一つに決まってしまって変更できません
どうすればいいですか?

class vec{
int x;
public:
vec(int n, ...){}
};

101 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:59:21 ]
template使え

102 名前:デフォルトの名無しさん [2008/03/01(土) 02:04:43 ]
100次元でもできるようにするためには、テンプレートを再帰的につかうようにすれば
いいと思いますがわかりません どう書けばいいですか

103 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:09:53 ]
まだこれいたのか



104 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:13:35 ]
もう誰も触るなよ。

105 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 03:20:54 ]
Cのcursesについてお教ください

printw("mojiretsu");

char buf[]="mojiretsu"
printw("%s",buf);

これで前者が表示され後者が表示されないのは何故なんでしょうか。

106 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:17:36 ]
>>105
環境くらい書いた方が。
どちらのコードも問題はないと思う。
refreshはしている?
前者が表示されているってことなので大丈夫だとは思うけど。
お試しコードみたいに短いのを書いていて、
printw→refreshのあと、すぐにendwinとかしてたら表示が見えていない可能性あり。

107 名前:105 mailto:sage [2008/03/01(土) 04:36:50 ]
OSはクノーピクスのDVD最新ver、コンパイラはgccです。

int main()
{
initscr();

move(5,1);
printw("mojiretsu");
refresh();

char buf[]="mojiretsu";
move(8,1);
printw("%s",buf);
refresh();
getch();

getchで止まった時に上のmojiretsuは表示されているのに下はされないという状態です。
最初はcygwinでやろうかと頑張ったのですが、cursesライブラリがどうやってもリンクできずクノーピクスを使うに至っています。

108 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 05:28:37 ]
>>107
fedoracoreでは特に問題なく二つの行ともに表示された。
そのソースでcursesを使うプログラムとしては特に問題はないと思うけど、
くのーぴくすに入ってるライブラリのバグなのかな……
windows上でなら、cygwinのcursesでもいいと思うけど、
PDcursesを取ってきて自前でライブラリを自分の得意の環境でコンパイルする手もあるよ。
それならリンクのやりかたが分からないとかって問題もないと思う。

109 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 05:31:29 ]
printw("mojiretsu");とprintw("%s",buf);の順番が逆の時はどう?

110 名前:105 mailto:sage [2008/03/01(土) 05:57:14 ]
逆にした場合もprintw("mojiretsu");の側しか表示されません。
どうやら環境が問題のようなので108さんが紹介してくださった方法等試してみます。
ありがとうございました。

111 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 06:18:59 ]
printwww

112 名前:デフォルトの名無しさん [2008/03/01(土) 09:03:27 ]
C++のdeleteについて質問させてください。
環境はWindowsXP VS2005EEです。

newしたポインタをdeleteすると、メモリの中身がfe ee fe eeとなります。
fe ee fe eeという値には何か意味があるのでしょうか?


113 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 10:36:51 ]
>>112
メモリ管理の都合やらデバッグの都合やらで値を書き換えているのかも
しれない。ともかく、delete後のメモリなんて参照しちゃダメ。ぜった
いダメ。





114 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 13:27:17 ]
>>113
もちろん、その値を何かに使ったりはしませんが
見るだけでも何かまずいことがおこるんですか?

115 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:00:51 ]
ネットからダウンロードしたデータがシフトJISコードの場合char型のに入れると
文字化けしてしまってまともに処理できないんですが、ecuに変換すればいいんでしょうか?
できたらやり方かサンプルソース公開してくれてるサイト教えて欲しいです

116 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:05:12 ]
間違えたecuじゃなくてEUC

117 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:23:31 ]
GNUのlibiconvでも使えば?
GPLイヤンならIBMのICU

窓限定でいいのなら
ttp://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=613442&SiteID=7

118 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:42:32 ]
>>117
ありがとう。勘違いしてたEUC→SJISに変換だった
自力で関数作ってどうにかできました

119 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 14:43:11 ]
>>114
起こらないかもしれないが、起こるかもしれない
まだOSにメモリを返してなければ大丈夫かもしれないが、
返しちゃってた場合はアクセス違反で落ちるかも
処理系の実装と運次第

120 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 15:22:17 ]
>>114
動作未定義だから鼻から悪魔が出るかもしれんし、HDDが
フォーマットされるかもしれない。

121 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:32:42 ]
VCで定数のアライメントってどうするん?
packじゃ出来なかったYO


122 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 16:47:33 ]
定数のアライメント に一致する日本語のページ 約 件中 - 件目 ( 0.201466 秒)
定数のアライメント に該当するページは見つかりませんでした。

123 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:32:52 ]
ifとswitchくらいしかまだ使ったことがないのですが、
条件分岐をする際 if を良く使います。ifの中にifその中にif って普通でしょうか?



124 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:48:13 ]
普通

125 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 17:52:33 ]
あまり深くすると後で読みづらくなったりする。個人的には5段とか行くと分割を考える。

126 名前:デフォルトの名無しさん [2008/03/01(土) 18:14:46 ]
C++で、doubleという名前の関数を作れるでしょうか?
void double(int a);
とかそんな感じ。今あるソースをみているんですが、コンパイルできなくて、
どうもそこでひっかかってるんじゃないかと。。できないとおもうんですが、
そう言いきってしまっていいですか?


127 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:25:21 ]
doubleは予約語だから当然ダメ。Doubleならおk

128 名前:デフォルトの名無しさん [2008/03/01(土) 18:32:13 ]
>>127
ありがとうございます。

129 名前:デフォルトの名無しさん [2008/03/01(土) 18:49:02 ]
コンパイラや標準ライブラリベンダが使用する識別子について質問です

どうやら以下の条件を満たす識別子は使ってはいけないみたいですが
1 _で始まり、大文字が続く名前
2 __(アンダースコア2こ)を含む名前
3 グローバルスコープで _で始まる名前

ケースA int _Hoge;//ダメ(1に抵触)
ケースB int __hoge;//ダメ(2,3に抵触)
ケースC int hoge__hige;//ダメ(2に抵触)
ケースD int _hoge;//ダメ(3に抵触)
ケースE namespace foo{ _hoge;} //これはok?
ケースF class Hage{ int _hoge;} //これはok?

ケースEとFが合法なのかどうかわかりません

この辺を指摘(警告とか)してくれるコンパイラとかないんですかね


130 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:54:36 ]
ないでしょうね、なにろ標準ライブラリが使っているわけですから・・・

しかし、初めてみたなそのルール。
_ __ が最初につく名前は駄目だというのは知ってたけど。
129 ルールでは E F は合法っぽいけどね自分の知っているルールでは非合法だ。

131 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:06:45 ]
>>129
_ に小文字が続く識別子に関しては、
グローバルネームスペースでのみしか禁止されていない。

でも、マクロでは禁止されてた気がする。

132 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:20:17 ]
マクロはnamespace関係ないからな。

133 名前:デフォルトの名無しさん [2008/03/01(土) 19:44:45 ]
__FILE__や__LINE__ってどのファイルに定義してあるのでしょうか??



134 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:49:30 ]
大抵は字句解析器が置換する。

135 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:50:50 ]
tryブロックでthrowされた例外がcatchされてcatch内で例外処理が成された後、
正常系はどこから復帰になるのでしょうか?

136 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:52:05 ]
最後のcatch節の下

137 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 19:53:51 ]
復帰しないよ?そのまま続く。
try{
A; //例外発生
B;
}catch( exception &e ){
C; //例外処理
}
D;

なら、正常は:A, B, D。
Aで例外時は:A, C, D。
もちろん、Cで例外が発生したり、throwしたりしたら別だけど。

138 名前:デフォルトの名無しさん [2008/03/01(土) 19:58:13 ]
Win32APIのWindowsアプリケーション開発環境を作るためにPlatform SDKを
インストールしたのですが、corewin_express.vspropsのデータの修正が出来
なくて困っています。 どうしたら、修正する事が出来るようになるのでしょうか?

ちなみに、OSはvistです。


139 名前:デフォルトの名無しさん [2008/03/01(土) 20:01:49 ]
visual stdio2008のexpressいれとけ

140 名前:デフォルトの名無しさん [2008/03/01(土) 20:13:48 ]
>>134
ありがとうございます。

141 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:34:52 ]
>>136-137
ありがとうございます
tryブロックの範囲の選定も気をつけないといけないようですね

またまた質問なんですが

std::exceptionを継承してMyExceptionクラスを作ってそこに、例外発生時のログ取り機能を追加しました
不正な引数を取ってしまったときinvalid_argumentのような例外クラスを投げたいのですが

多重継承は色々ややこしいのでMyExceptionから派生させて相当の自作クラスを投げる
やっぱりMyExceptionとinvalid_argumentの多重継承を行う

どちらがよいのでしょうか?


142 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:39:40 ]
ログ取り機能を例外クラスから分離した方がいいと思う。

143 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:41:52 ]
MyExceptionからログ鳥部分を分離して、派生のない
ExceptionLogクラスを作り、std::invalid_argumentと
派生した例外を投げる、みたいな。



144 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 22:02:07 ]
>>142-143
必要な標準例外クラスから派生したmy標準例外クラスを作って
そのクラスにログ取り機能クラスを保有させたほうがいい

ということですよね?
そのほうが系統だった例外クラスの構造になるのでしょうか?

145 名前:138 [2008/03/01(土) 22:11:41 ]
2005で作りたいのですが、いい方法はありませんか?
どこかの設定をいじると書き込み可能になったりとかないんでしょうか・・・。

146 名前:デフォルトの名無しさん [2008/03/01(土) 22:12:05 ]
1クラスに2つ以上の機能を入れるのは一般によくないとされている

147 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 22:23:16 ]
とりあえずロガークラスを作るのは確定としても、
以降をどう実装するかは結構悩みどころだな。

個人的には throw をマクロ LOG_THROW みたいなので置き換えて、
その中で例外を投げる前にログを取るようにするのがいいと思う。

マクロは使わずに済むなら使わないのが一番いいんだけど、
デバッグ時に __FILE__, __LINE__ を利用したり、
文字列化演算子を使って移植性の高い方法でクラス名を表示したりできるから、
ログ取りには便利だと思う。

148 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:38:52 ]
質問です。
ヘッダをインクルードせずに
class Cls* pCls;
と書くのはOKなんですけど

namespaceで括られた場合に
class Name::Cls* pCls;
と書くと'Namne' : 識別子がクラス名でも名前空間名でもありません。
とエラーが出ます。

インクルードせずに宣言する方法ってあります?






149 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 23:45:13 ]
>>148
こうかな
namespace Name{
 class Cls;
}
Name::Cls *pCls;

150 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:06:39 ]
ところで標準例外std::exceptionの中身ってどうなってるんだろう?

151 名前:デフォルトの名無しさん [2008/03/02(日) 00:12:35 ]
CLASS x={1,2,3,4,5,6};
はどのようにかけばジツゲンできますでしょうか

152 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:14:58 ]
boost::arrayでも見れば?

153 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:26:06 ]
>>150
実装依存としか。



154 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:27:31 ]
>>152
要するにあれは構造体の初期化だよね。
コンストラクタが無ければクラスだろうが
あのタイプの初期化ができることを利用しているという。

155 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:44:18 ]
boost::arrayは {{ }} で囲わないとダメだろう。

156 名前:148 mailto:sage [2008/03/02(日) 00:49:28 ]
>>149
無事宣言することが出来ました。
ありがとうございます。

お礼にオプーナを買う権利をあげます。

157 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:11:03 ]
「↓」を表示後、キー入力があるまで処理を一時停止させ、
キー入力があればそれに対応した動きをさせたいのですがどうすれば良いでしょうか?
getch()だと入力待ちカーソルが邪魔になってしまい、困ってます

158 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:11:07 ]
>>155
いや、必要ではない。

159 名前:デフォルトの名無しさん [2008/03/02(日) 01:13:39 ]
>>157
別スレで環境依存だといわれたろ?
なぜ環境を書かない

160 名前:157 mailto:sage [2008/03/02(日) 01:17:19 ]
すみません、vidual studio2005のC++です

161 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:15:30 ]
>>147
実装方法ですか。
マクロを使うというとこういう感じになるのでしょうか?

ErrorLogger(char* filename, int linenumber, const char* errmsg)
のようなロガークラスを用意して、
コンストラクタ内でエラー内容を記録させてしまうようにしておいて

#define THROW(msg , exception_type) ErrorLogger log(__FILE__ , __LINE__ , msg);\
throw exeption_type\

というようなマクロを組めばよいのでしょうか?

というか、初めてマクロを組んだのであってるかどうかも判りませんorz

162 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:55:52 ]
>>161
自己レスながらマクロ修正してみた

#define THROW(msg , exception_type) ErrorLogger log(__FILE__ , __LINE__ , msg); \
exception_type e;\
throw e\

これでだいじょうぶですかね?

163 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 02:58:56 ]
>>161-162
ErrorLogger をクラスにする意味がわからない。関数でいいだろ。
例外オブジェクトにデフォルトコンストラクタしか使えないのは無駄な制限。
マクロ名は動作を表すように LOG_AND_THROW() とかにしたほうがよくない?
あと、最後の \ が余計。



164 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:00:12 ]
inline関数でいいじゃまいか。何故define・・・しかもTHROWはないなw

165 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:03:37 ]
>>164
__FILE__, __LINE__ は inline 関数だとマズイだろ。

166 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:18:51 ]
#define LOG_THROW(type) \
 do { \
  :LogAndThrow(#type, __FILE__, __LINE__); \
  throw type(); \
 } while(false)

void LogAndThrow

167 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:19:13 ]
途中で送ってしまった・・・。

168 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:26:43 ]
#ifdef NDEBUG
#define LOG_THROW(type) \
 do { \
  LogAndThrow(#type); \
  throw type(); \
 } while(false)

void LogAndThrow(const char* type_name)
{
 ErrorLogger log;
 // ここでログをとる
}
#else
#define LOG_THROW(type) \
 do { \
  LogAndThrow(#type, __FILE__, __LINE__); \
  throw type(); \
 } while(false)

void LogAndThrow(const char* type_name, const char* file_name, int line)
{
 ErrorLogger log;
 // ここでログをとる
}
#endif

こんな感じ。
実際には関数の実装は .cpp 側に書くわけだけど。

THROW という名前は何かと使われている恐れがあるので止めた方がいい。
LOG_THROW って名前も、実際には何か接頭辞を付けた方がいいと思う。

169 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:30:39 ]
しまった。ログとるだけにしたから LogAndThrow じゃなくて LogError だな。

170 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 11:31:38 ]
もちつけ

171 名前:デフォルトの名無しさん [2008/03/02(日) 13:09:31 ]
ifstreamで読込みをしているとき、改行を読み込んだことを知るにはどうすればよいですか?


172 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:10:28 ]
読み込んだ内容が改行を含むかどうかチェック。

1行ずつ読み込みたければ getline が使える。

173 名前:デフォルトの名無しさん [2008/03/02(日) 13:16:15 ]
>>172
int a;
ifs >> a;
みたいにやってるんですが、
> 読み込んだ内容が改行を含むかどうかチェック。
はどうやればいいですか




174 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 13:18:17 ]
ああ、そういうことか・・・。
それは無理じゃないかな。

175 名前:デフォルトの名無しさん [2008/03/02(日) 13:20:54 ]
>>174
じゃあ、一行ずつ読みたいなら、getline()でやるしかないですか?







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

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

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