C++相談室 part56
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/07/26(木) 00:33:07ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
テンプレその他 >>2-15 付近参照
前スレ
class C++相談室lt;part56gt;
http://pc11.2ch.net/test/read.cgi/tech/1170343752/l50
0153デフォルトの名無しさん
2007/07/30(月) 02:37:35ロケールは貨幣や数値、時刻の形式なども扱うが、この場合は
LC_CTYPEというカテゴリを指定してやることで、
文字エンコーディング(SJISだのEUC-JPだの)をCランタイムに
教えてやっている。「""」は、「実行環境に応じて良きにはからえ」という
意味だ。Cランタイムはそれに応じてワイド文字とマルチバイト文字の
変換を行う。
0154130
2007/07/30(月) 03:02:24なるほど、だからロケールを設定してないときの読み込み方がおかしかったんですね
わかりやすく教えていただきありがとうございました!
0155デフォルトの名無しさん
2007/07/30(月) 08:17:11具体的には次のようなことをやりたいのですが…
template<typename T>
struct PtrWrapper { T* p; };
class A {...};
class B : public A {...};
PtrWrapper<A> a;
PtrWrapper<B> b;
a = b; // 可能
b = a; // 不可能
0156デフォルトの名無しさん
2007/07/30(月) 11:44:19class Conversion
{
typedef char Small;
class Big { char dummy[2]; };
static Small Test(U);
static Big Test(...);
static T MakeT();
public:
enum { exists = sizeof(Test(MakeT())) == sizeof(Small) };
};
int main() {
using namespace std;
cout
<< Conversion<double, int>::exists << endl
<< Conversion<char, char*>::exists << endl
<< Conversion<size_t, vector<int> >::exists << endl
<< Conversion<A*, B*>::exists << endl
<< Conversion<B*, A*>::exists << endl;
}
詳しくは Modern C++ Design 参照。
0157デフォルトの名無しさん
2007/07/30(月) 16:10:51追加したコンテンツをドラッグ&ドロップで移動できるのですが、
そのUIを、WinXPSP2上のVS2005 C++ Windowsフォームにて実装してみたくて調査中なのですが、
技術的に停滞中です。
フォームにPanelを配置し、そのパネルをドラッグ&ドロップすればよいのかと思うのですが、
パネルのドラッグ&ドロップが出来ません。。
何かサンプルありませんか?
0158デフォルトの名無しさん
2007/07/30(月) 16:26:330159デフォルトの名無しさん
2007/07/30(月) 17:46:58COleDropTargetですか。ちょっとみてみましたが、
楽チンポンとは行かないみたいですね。
ちょっと勉強にいそしみます。
0160デフォルトの名無しさん
2007/07/31(火) 00:30:10ありがとう!
ていうか解説読んで感動しました…
0161デフォルトの名無しさん
2007/07/31(火) 09:22:22どうせ中では同じようなことをやってるはずだけど、使えるなら Boost TypeTraits を使うのが楽。この場合は is_convertible
0162デフォルトの名無しさん
2007/08/01(水) 05:03:00対応する placement new の実行中に例外が発生した場合に呼ばれるからという
ただそれだけのために存在する、という認識で問題ありませんか?
0163デフォルトの名無しさん
2007/08/01(水) 06:18:290164デフォルトの名無しさん
2007/08/01(水) 06:24:12と定義して
struct s s_obj();
としてもコンストラクタが呼ばれないんですが、
俺何か間違ってるんでしょうか?
0165デフォルトの名無しさん
2007/08/01(水) 06:31:420166デフォルトの名無しさん
2007/08/01(水) 11:23:21もっとも、s s_obj; で十分だが。
0167デフォルトの名無しさん
2007/08/01(水) 12:24:54どうせ君は使わないだろうから問題ないよ。
人と話すときにはその話題避けてればいいんだし。
0168デフォルトの名無しさん
2007/08/01(水) 12:32:58違う。正しくは
対応する placement new が成功した後のコンストラクタで例外が発生した場合に以下同文。
0169デフォルトの名無しさん
2007/08/01(水) 13:11:18new-expression:
::(opt) new new-placement(opt) new-type-id new-initializer(opt)
new-placement:
( expression-list )
と書いてあって、new-placement ってのはあらゆる引数リストを指す要素のようだけど、
引数つきの new は何でも placement new と呼ぶのか?
0170デフォルトの名無しさん
2007/08/01(水) 13:13:10最初に想定されたのが配置に関する制御だったので、
placement newと名付けられたが、
使ってみたら色々使い道があったというわけ。
0171デフォルトの名無しさん
2007/08/01(水) 13:17:43っつーことは、「いつもの placement delete」 には特に呼ぶ価値ないけど、
それ以外の placement delete には十分価値があるかもしれんっつーことか。
0172デフォルトの名無しさん
2007/08/01(水) 21:46:240173デフォルトの名無しさん
2007/08/01(水) 21:53:000174デフォルトの名無しさん
2007/08/01(水) 22:31:34{
AnsiString Value;
TRegistry *Reg = new TRegistry();
Reg->RootKey = RootKey;
if(Reg->OpenKey(Key,false)){
if(Reg->ValueExists(Name))
Value = Reg->ReadString(Name);
Reg->CloseKey();
}
Reg->Free();
return Value;
}
0175デフォルトの名無しさん
2007/08/02(木) 00:53:060176174
2007/08/02(木) 00:57:40↓続き
関連する項目をググって、上記ソースを見つけたのは良いのですが、
得た値"Value"をstrcpy(a,b)のbで使おうとすると、
AnsiString型からキャストできず、エラーとなります。
AnsiString型をキャストすること自体がよろしくないようなのですが、
キャストか、他に良い方法がありましたら教えてください。
長文すみません。よろしくお願いします
0177デフォルトの名無しさん
2007/08/02(木) 01:01:430178デフォルトの名無しさん
2007/08/02(木) 01:13:55Value.c_str()でやれということ
0180デフォルトの名無しさん
2007/08/02(木) 22:26:11どうすればいいでしょうか?
0181デフォルトの名無しさん
2007/08/02(木) 22:29:12Win32APIのQueryPerformanceFrequencyは?
0182デフォルトの名無しさん
2007/08/02(木) 22:32:00しかしモバイル用CPUとか動的にクロックが変化するCPUだとちょっと困る
0183デフォルトの名無しさん
2007/08/02(木) 22:42:28もしかして不可能?
0184デフォルトの名無しさん
2007/08/02(木) 22:45:000185デフォルトの名無しさん
2007/08/02(木) 22:46:46レジスタに信用なら無いモデルナンバーが返って来る
メーカーの資料と照らし合わせる
周波数を知る
0186デフォルトの名無しさん
2007/08/02(木) 22:51:170187デフォルトの名無しさん
2007/08/02(木) 22:56:08だから>>181でFA
0188デフォルトの名無しさん
2007/08/02(木) 23:08:53ああ、その方法もありますね。しんどいけど。
どこかに cpuid --> cpu clock 変換表みたいなのありませんか?
クロック自体はrdtscで読めるんですが、
最近のCPUは省電力モードとかで
クロック自体が落ちてることもあって
正確なクロックが取得できないんです
0189デフォルトの名無しさん
2007/08/02(木) 23:15:320190デフォルトの名無しさん
2007/08/02(木) 23:24:100191デフォルトの名無しさん
2007/08/02(木) 23:40:090192デフォルトの名無しさん
2007/08/03(金) 16:33:06C++ だと 9.2p8 を見る限り対応されてなさそうな雰囲気を感じる。
これは、非静的メンバ配列変数のサイズは必ず指定する必要があるという記述だから
ここだけじゃ実際のところはっきりとは分からんけど。
でも、次期 C++ ドラフトを見るとこの記述が削られてる。
これは C99 と同様に可変長のメンバ配列変数に対応された現れだと見ているけど、
そのことが書いてある箇所が見つからない。
C++ での可変長のメンバ配列変数への対応具合の状況はどんな感じなんじゃろか。
0193デフォルトの名無しさん
2007/08/03(金) 20:55:470194デフォルトの名無しさん
2007/08/03(金) 21:23:30でも、本気でそれでも問題ないと思うんだよな。
正直可変長メンバってどのくらい意味があるのか分かんないな。
Windows API とか可変長メンバを要求するところがあるから
しゃーなしで使わんといかんこともあるんだが。
0195デフォルトの名無しさん
2007/08/03(金) 21:33:07なるから、そのままファイルに読み書きしたりできて便利な場合もあるでそ
0196デフォルトの名無しさん
2007/08/03(金) 22:04:00vectorやstringのサイズ増加時にコピーが走りまくって参った。
0197デフォルトの名無しさん
2007/08/03(金) 22:16:19そういうハナシじゃない?
0198デフォルトの名無しさん
2007/08/03(金) 22:19:340199デフォルトの名無しさん
2007/08/03(金) 22:25:23書き込みは一発だけど、
読み込む時は一旦サイズを読み出さないといかんのだよな。
状況によってサイズが分かる場合もあるけどさ。
そこまでの利点には思えんのよなあ。
昔だとその僅かな差も重要だったんだろうか。
0200デフォルトの名無しさん
2007/08/03(金) 22:27:52<cstdlib>のreallocも、その場で拡張できなければ、
新しい領域を確保して、そこへ元の記憶域の内容をコピーすることになっている。
クラスインスタンス相手にコピーコンストラクタを使わず複写なんて
やるわけには行かないから、アロケータにrealloc相当の操作がないのも妥当な判断。
仮にやるとしたら、その場で拡張できるときだけ成功するrealloc操作
なんてことになるんだろうな。
0201デフォルトの名無しさん
2007/08/03(金) 22:33:47malloc()/free()一発で確保・解放できるのも「Cでは」便利
で、特にデメリットも無いわけで
まあ可変長に出来るのは最後のメンバだけ、という制限があるけどな
ま、基本的に言語サポートが貧弱なCで特に生きるテクニックという気がする
0202デフォルトの名無しさん
2007/08/03(金) 22:35:49その後にちゃんとコピーコンストラクタを placement new で呼べば一応正常に動作する。
問題は二度手間になることと、
realloc による管理は C++ っぽくないってところだな。
0203デフォルトの名無しさん
2007/08/03(金) 22:36:31パフォーマンスに関わるんで結局手書きしちゃったよ
無駄にT()でfillするし・・・
0204デフォルトの名無しさん
2007/08/03(金) 22:37:30どっちゃにしろ動的に確保する場合は
確かに一発で済むから便利か。なるほど。
0205デフォルトの名無しさん
2007/08/03(金) 22:40:24例えば倍々に増やしていったりする実装の存在なんかを考えれば、
やっぱりコンテナがrealloc相当のことをやっているんだよなと思う。
0206デフォルトの名無しさん
2007/08/03(金) 22:42:15Stroustrupが説明してた気がするが、忘れた
0207デフォルトの名無しさん
2007/08/03(金) 22:45:500208デフォルトの名無しさん
2007/08/03(金) 22:49:310209デフォルトの名無しさん
2007/08/05(日) 02:02:59中で特別な関数以外の関数呼んだら未定義とか規格に書いてるんだけど。
0210デフォルトの名無しさん
2007/08/05(日) 02:04:270211デフォルトの名無しさん
2007/08/05(日) 02:04:590212デフォルトの名無しさん
2007/08/05(日) 02:05:320213デフォルトの名無しさん
2007/08/05(日) 02:09:07sigaction()を使うべき
Windowsのコンパイラが提供するsignal()は、規格を満たすためだけの紛い物で
何の役にも立たない
つまりsignal()なんて要らない子
0214デフォルトの名無しさん
2007/08/05(日) 02:10:340215デフォルトの名無しさん
2007/08/05(日) 02:11:280216デフォルトの名無しさん
2007/08/05(日) 02:14:570217デフォルトの名無しさん
2007/08/05(日) 02:15:530218デフォルトの名無しさん
2007/08/05(日) 02:17:24スレッドと相性が非常に悪いし
それでなくとも
シグナルハンドラが再インストールされるかどうかとか
システムコールが再送されるかどうかとか
シグナルハンドラ内であれをやってよいこれはよくないとか
バッドノウハウのすくつやん
0219デフォルトの名無しさん
2007/08/05(日) 02:23:03posixもM$がサーバ戦略に本腰いれて慌てて始めたもんだしなあ
0220デフォルトの名無しさん
2007/08/05(日) 03:22:10main で全ての例外補足してから異常終了した方が
ローカル変数のデストラクタが呼ばれていいと思うんだけど。
0221デフォルトの名無しさん
2007/08/05(日) 03:24:59例外処理中に例外が出たとか
0222デフォルトの名無しさん
2007/08/05(日) 03:27:032行目以降の意味がわからん。 set_terminate() 関係ないだろ。
0223デフォルトの名無しさん
2007/08/05(日) 03:36:23ああ、二重例外に対応する場合か。なるほど。
0224デフォルトの名無しさん
2007/08/05(日) 12:41:24捕らえたいんだけど、
try{}
catch( ... ){}
この構文では捕えられないんだけど、どうしたらいい?
0225デフォルトの名無しさん
2007/08/05(日) 12:44:090226デフォルトの名無しさん
2007/08/05(日) 12:54:51でもデフォルトから変更した場合、
ミドルウェアとか依存するライブラリ絡みの整合性が心配だな。
0227デフォルトの名無しさん
2007/08/05(日) 15:14:37まあC++の範疇じゃないな。
0228デフォルトの名無しさん
2007/08/06(月) 06:55:480229デフォルトの名無しさん
2007/08/06(月) 18:19:11いずれにせよVC++くらいしか使えるものがないというのに変わりはないけどな。
0230デフォルトの名無しさん
2007/08/06(月) 21:25:46スレ違いだったらすいません。
アプリ開発の依頼スレが見つからなかったのでこちらに書かせて頂きました。
当方所有のウェブアプリケーションソフト
(以前プログラマに依頼して作ってもらったものですが今は連絡が取れません)
がURL先の変更?で突然使えなくなってしまいました。
そこで、緊急で本日中に改変が出来そうな方是非お願いできないでしょうか?
当方、全くの知識不足で言語が C++ということ以外分かりません。
ソースファイルは持っております。料金は2万円でお願いします!
[email protected]
0231デフォルトの名無しさん
2007/08/06(月) 21:29:580232デフォルトの名無しさん
2007/08/06(月) 21:47:570233デフォルトの名無しさん
2007/08/06(月) 23:11:47ソースがあるならソースを晒せよ。ロハでできるぞ。
ソースを晒せないから有料でということなら、2万円なんて人を見下したようなことをするもんじゃない。
0234デフォルトの名無しさん
2007/08/07(火) 06:33:04{
}
0235デフォルトの名無しさん
2007/08/07(火) 06:34:28void foo(char *p, size_t len)
{
// ここでpとlenからistreamを作りたい
}
実際には、basic_istreamの派生クラスを作るしかないのでしょうか?
0236235
2007/08/07(火) 06:44:000237デフォルトの名無しさん
2007/08/07(火) 07:39:56↓エスパー1級
0238デフォルトの名無しさん
2007/08/07(火) 07:48:18ファイルストリーム以外でバイナリとテキストの問題なんて起こらないだろ?
istringstream でいいと思うよ。
0239デフォルトの名無しさん
2007/08/07(火) 07:50:42なんでバイナリを扱う必要があったら istringstream を見送るの?
0240デフォルトの名無しさん
2007/08/07(火) 09:01:360241デフォルトの名無しさん
2007/08/08(水) 20:13:23x = x +1
が疑問でもなんでもない俺は負け組
0242デフォルトの名無しさん
2007/08/08(水) 20:15:25固定観念はよくない
0243デフォルトの名無しさん
2007/08/08(水) 21:16:130244デフォルトの名無しさん
2007/08/08(水) 21:57:28x = x * x + Cならマンデルブロ集合なんだけどね。
0245デフォルトの名無しさん
2007/08/09(木) 10:46:54むしろそのへんの切り替えが高速にできない子は算数のできない子
0246デフォルトの名無しさん
2007/08/09(木) 19:51:160247デフォルトの名無しさん
2007/08/09(木) 19:59:43新しいルール、新しい前提の上でのゲームには一歩も踏み出せないってことだからな
その程度の頭の柔軟性が無いのでは算数やプログラミングに限らず
何やってもだめ
0248デフォルトの名無しさん
2007/08/10(金) 09:40:31そこに疑問を持ち、考察し、納得する、というプロセスをだな・・・
0249身の程知らず
2007/08/10(金) 12:01:33もちろんもっと人間にもコンパイラにも分かりやすくて、すばらしい文法は作れただろうが、
今のような位置を占めているかどうかは疑問だ。
以下、俺様演算子を定義できる機能とか、
Cのプリプロセッサなんかより、もっとプログラマブルで、文法を考慮するマクロとか、
↓禿のお気に入りだったマルチメソッドなどについて語ろう↓
0250デフォルトの名無しさん
2007/08/10(金) 12:04:48演算子オーバロードではお気に召しませんか?
>Cのプリプロセッサなんかより、もっとプログラマブルで、文法を考慮するマクロとか、
C99のプリプロセッサではお気に召しませんか?
それならDをどうぞ。
0251デフォルトの名無しさん
2007/08/10(金) 12:06:050252デフォルトの名無しさん
2007/08/10(金) 12:10:18シェア争いを制するために時間を惜しんだんだろ
結局当時は高級言語に負けたが。
■ このスレッドは過去ログ倉庫に格納されています