1 名前:デフォルトの名無しさん mailto:sage [2012/05/08(火) 04:55:24.99 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part94 toro.2ch.net/test/read.cgi/tech/1329512856/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.78【環境依存OK】 toro.2ch.net/test/read.cgi/tech/1331894668/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
612 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 21:41:55.41 ] > とりあえず他のエラー要因は無いということですか? 既出のように>>591 の適切な場所にCbdfの宣言と;を追加すればとりあえずコンパイルは通る が、意図したように動くか?
613 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 22:30:35.03 ] >>612 設計の話になってしまうのですが マネージャークラスが保持する任意のクラスから、 同じくマネージャークラスが保持する他の任意のクラスにアクセスしたいんです。 ファイルの階層構造みたいな感じで、例えばwindowsの Program FilesフォルダからWindowsフォルダにアクセスするときローカルディスクC:に戻るみたいな設計です。 C++風に書くと LocalDiscAddress->GetWindowsAddr()->hoge でも中々に読みづらい(´・ω・`)
614 名前:デフォルトの名無しさん mailto:sage [2012/06/03(日) 23:43:59.83 ] メモリポインタを使うと動くよ
615 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 00:21:22.68 ] 親クラス 子クラスがあります 親 hoge = new 子1 親 hoge = new 子2 みたいな感じで1つのオブジェクトで親と子の2クラスを両方扱いたいんです。 これは可能で、キャストすれば子独自のメソッドも使用可能なのはわかるんですが。 今親クラスのオブジェクトの宣言を std::auto_ptr で行なっているため、キャストが上手くいきません。 解決法としては、std::auto_ptr を辞めるしかないんでしょうか?他にいい方法がありましたら、 ご教授お願いします。
616 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 00:22:55.89 ] std::auto_ptrはそれ無理です std::unique_ptr使ってください
617 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 01:25:07.50 ] >>615 auto_ptr でも static_cast<子1&>(*p) すりゃ何の問題も無いだろう。 何か他に制約があるようならコード晒せ。
618 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 01:36:00.60 ] ダウンキャストするぐらいなら最初から子のauto_ptr使えよ
619 名前:615 mailto:sage [2012/06/04(月) 01:36:05.78 ] dynamic_cast ではなく static_cast を使うんですか? これは思いつきませんでした。ありがとうございます。
620 名前:615 mailto:sage [2012/06/04(月) 01:42:13.45 ] 初めは子の auto_ptr を使っていたんですが、コーディングが冗漫になったので ダウンキャストしようかと。
621 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 01:46:09.88 ] だったら親と子の型2つのスマポを用意して 同じオブジェクトを参照させるべき auto_ptrじゃ使えねぇからshared_ptr使うことになるけどね
622 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 02:24:53.64 ] >>619 型を自分で保証できるなら static_cast でいい。
623 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 02:25:16.25 ] >>621 それはないわ。
624 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 05:39:45.46 ] 安易なダウンキャストは止めたほうがいい 根底と、派生2つのポインターで管理してる場合は、 派生クラスを差し替えた際、派生のポインターで コンパイルエラーを引き起こせる。根底のポインターを 1個使い回しダウンキャストする方法だと、 派生を交換しても実行時になるまで、キャストミスに よるエラーが解らない。関数スコープならそこまで 面倒じゃないが、クラススコープだと問題特定が面倒になる。
625 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:07:32.40 ] UNIX系で C++ 勉強してて最近 Visual C++ 2010 はじめたばかりなんですけど Visual C++ で時刻を取得するにはどうしたらいいんでしょうか time.h インクルードしても time_t time; は宣言できるんですが time(&time); でエラーになります レベルの低い質問ですいません…
626 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:15:56.30 ] エラーの内容を書けと
627 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:18:53.48 ] すいません>< 式には(pointer-to0)関数型が必要です っていうエラーがでます
628 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 07:25:16.64 ] うわあ はずかしい ごめんなさい 自己解決しました time_t t; time(&t); にしたらとおりました C++は関数と変数で名前空間かぶっちゃだめなんですね 授業でならうの Java が多いのでので知りませんでした おさわがせしました><
629 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:28:28.59 ] 一定時間ごとにメッセージボックスを表示するだけのプログラムを作ったんですけど メッセージボックスが表示されてないときにプログラム終了するには タスクマネージャーからきるしかないんでしょうか… 好きなときに終了できるようにするにはどうするのがスマートなんでしょうか… #include <windows.h> #include <time.h> #define INTERVAL 60 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { time_t prev = (time(NULL) + 300) / 1800; while(1) { time_t now = (time(NULL) + 300) / 1800; if(now != prev) { MessageBox(NULL, TEXT("時間で〜す"), TEXT("時間で〜す"), MB_OK | MB_TOPMOST | MB_SETFOREGROUND); prev = now; } Sleep(INTERVAL * 1000); } }
630 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:33:59.01 ] >>629 例えば「好きなとき」をキー入力で伝えることにすれば、てきとうな API でキー入力でも監視すればいいだろう。 心を読んで欲しいということならたぶん無理だ。
631 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:43:08.60 ] あ〜 説明不足でごめんなさい できればキーじゃなくて直感的に分かりやすい操作で終了dけいるようにしたいんですけど たとえば常にベースパネルだけ表示させてそこに終了ボタンつけるとか… 下のタスクバーに表示させて右クリック終了みたいにできるとか… って簡単にできますか? なにぶん GUI プログラミング初心者なもので…
632 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 09:59:34.74 ] Shell_NotifyIconでgoogle
633 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 10:05:46.32 ] あ まさにやりことこれでした! なんか難しそうですけどがんばってよんでみます! ほんとにありがとうございました!
634 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 10:12:32.33 ] >>629 今度からは環境を明記の上、環境依存OKのスレに書いてね。
635 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 17:47:30.54 ] カンマで並列関係にある引数、(a1,a2)や(a,b)の順序が 固定されないのはいいけど a1,a2,b1,a,b のように並列関係を超えて順序が未規定なのは何でだろう これのせいで f(std::unique_ptr<A>(new A()), std::unique_ptr<B>(new B())); が危険なコードになってしまう C++11で直せばよかったのに どうせCと完全互換でないんだから例外に絡むところまで合わせる必要ないのに
636 名前:635 mailto:sage [2012/06/05(火) 17:49:38.33 ] 1行目消しちゃった f(a(a1(), a2()), b(b1())));
637 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 19:13:51.16 ] >>635 評価順序の話か? その危険なコードとやらがどう危険なんだ?
638 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 19:33:33.75 ] >>637 new A()実行後にunique_ptrに渡される前にnew B()が呼ばれ Bのコンストラクタが例外を出すとAは解放されない 並列関係を超えない場合はnew A()の結果が必ずunique_ptrに渡されるので、 その後Bが例外を出してもunique_ptrのデストラクタで例外安全は保たれる ↓はshared_ptrでの例、C++11/unique_ptrでも同様 www.boost.org/doc/libs/1_49_0/libs/smart_ptr/shared_ptr.htm >Avoid using unnamed shared_ptr temporaries to save typing; to see why this is dangerous >void bad() >{ > f(shared_ptr<int>(new int(2)), g()); >} 関数の引数で無名スマポを作ってはいけないという話
639 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:01:42.25 ] 一応引数内でもラムダ使えば評価順序をブロック化出来るか 流石にやんないけど f([&](){return std::unique_ptr<A>(new A());}(), [&](){return std::unique_ptr<A>(new A());}()); ideone.com/hJh8q
640 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:06:10.81 ] >>636 引数の評価順が固定されない方が最適化が楽な処理系があるからに決まってるじゃん
641 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:16:38.14 ] >>640 それと引き換えにスマポを一時オブジェクトにすることで可能な最適化が出来なくなってる あと評価順の固定とまでは言ってない、並列関係を越えないことの保証と言ってる f(a(), b(d()), c())がb,c,aという順でもいいけど、 dとbの間にa,cが入らないのを保証して欲しいということ その制限でも出来なくなる最適化はあるだろうけどさ、トレードオフに見合うかは疑問
642 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:37:01.40 ] >>640 stdcallとcdeclじゃ引数の積み方が逆だし 今更固定にできないよな
643 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:51:49.09 ] >>641 スマポはtemplateが入ってきてからboostから入れられた概念だろ それに対し引数の評価順はC時代から規定されていない スマポがC++98/2003にもう入っていたら規定されてたかもね 他にも&&や||のオーバーロードも短絡評価ではなく全部評価してしまう という元の演算子とは異なる挙動を見せるなど問題点は一杯あるだろ More Effective C++に書いてあるけど
644 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 20:55:17.19 ] てか便利な仕様だな コンパイラーベンダーは、引数で時間のかかる処理呼ばれたら スレッド化する最適化とかすりゃいいのに
645 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:03:14.06 ] でも並列化で早くなるかどうかは環境次第だしなあ 1コアで並列化しても意味が無いし
646 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:06:49.51 ] アーキティクチャー指定でいいんじゃね 今でもSSEなんてそうだし
647 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:28:25.32 ] 数値と文字列で比較はできても結合できる必要は無いな 既に似たような仕組みがあるし
648 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:28:43.05 ] 誤爆した・・・
649 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:31:12.76 ] 似てるからね
650 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:32:15.39 ] どこのを誤爆したかすぐにわかってしまったw
651 名前:デフォルトの名無しさん [2012/06/05(火) 22:23:05.31 ] このスレいつからC++11板に・・・(笑 現実的に考えて日本語版Effective C++11が出るくらいまで (2年後くらい?)はC++11普及しない気がする。 もっと悲観的な見方をすれば、爆発的な機能増強のせいで、 C++03に対するC言語ユーザの認識程度にしか広まらなかったりして。 「あ〜C++11ね、コンパイラは使ってるけどね」 そのへんどう考えてるの>偉い人
652 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:59:59.19 ] C++11板とか単一言語しか許されない板怖すぎる
653 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 14:45:53.32 ] C++11はC++の一方言だ
654 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 10:09:46.63 ] >>652 auto_ptrは板違いとか言われそうw
655 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:46:47.32 ] まだ規格から消えてないから大丈夫
656 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:07:08.62 ] でもdepricatedなんだろ
657 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:28:46.06 ] exportに比べればマシな扱いさ
658 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:33:27.84 ] const auto_ptrなら残してもいいと思う
659 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 16:01:44.79 ] const auto_ptrは感動した
660 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:08:17.52 ] 別にunique_ptrでええやん
661 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:37:16.62 ] だってまだ無かったりtr1だったりする環境が・・・
662 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:40:21.33 ] boostに03で動くのなかったか 使ったことないからどんなできかは知らんが
663 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 21:38:15.30 ] LPCTSTRも仲間に入れてあげて
664 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 21:41:46.55 ] >>662 C++11のものと同じような使い勝手だと思うとモニターに右ストレート叩き込みたくなるレベル
665 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 22:58:15.54 ] C++11が使えないならboost::scoped_ptrを使えばいいじゃない
666 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:11:55.09 ] boostで日本提供のライブラリって多いよな 日本優秀だな
667 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:12:53.39 ] たとえば?
668 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:14:28.80 ] boost::sinobi boost::geisha boost::shogun
669 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 03:27:19.55 ] boost::harakiri
670 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 03:59:45.65 ] boost::fukushima このライブラリは日本の優秀さをみごとに示している
671 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 04:21:40.19 ] え?これってマジ?なわけないか
672 名前:デフォルトの名無しさん [2012/06/09(土) 22:08:27.44 ] 最近アクセスしたデータを高速に取出し、 アクセス頻度の低いデータをちゃっちゃと 削除する(所謂キャッシュ)のに、適した STLコンテナーの組み合わせってなんだろうか? 大量の配列からデータを検索するんだが、 その検索速度よりは、速くしたい。
673 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 22:23:21.20 ] priority_queueとか
674 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 22:30:55.99 ] 言ってる事はLRUアルゴリズムの事だと思うんだけどこれをSTLでするにはなあ LRU STL でぐぐってみたら?
675 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 22:49:25.47 ] >>672 こんなのは? timday.bitbucket.org/lru.html
676 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:07:32.88 ] >>675 商用なんで、そんな得体の知れない、何の保障もないものは使えないんですよ
677 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:12:42.90 ] スプレー木自作コースだな バグ多発のヨカーン
678 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:14:14.01 ] >>676 2chで金取るような質問すんなよ そこまで言うなら自分で考えな
679 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:21:08.76 ] スプレー木 Boost にあるじゃん
680 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:21:59.97 ] >>679 商用なんで、そんな得体の知れない、何の保障もないものは使えないんですよ
681 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:22:45.47 ] >>675 ありがとうございます。もっと詳しく調べてみようと思いますが キャッシュ管理コスト自体が重そうですね・・・
682 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:24:13.85 ] dllが複数のアップリケーションから読み込んで使われるとして、そのdllの別々のインスタンスに共通のデータを持たせる方法はありますか? 具体的には、読み込まれたdllのインスタンスが自分が何番目のdllインスタンスなのかを知ることができるかどうかなのですが HD書き込みよりも直接的な方法で
683 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:26:56.11 ] 共有メモリ
684 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:30:58.11 ] >>682 templateのinstanceは共有できんぞ 単に変数とか記憶領域の事をいってんならMemory-Mappedか、 data_segをつかう↓。ただし処理系依存だし、addressも制御できんから 特別事情がない限りMemory-Mappedを使うべき msdn.microsoft.com/ja-jp/library/h90dkhs0 (v=vs.80).aspx
685 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:31:33.01 ] >>683 ありがとうございます、ググっていけばなんとかなりそうな雰囲気がつかめました これって言語レベルで使えるものなんですかね?
686 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:40:59.55 ] >>684 更にありがとうございます チラッとし食べてみた感じ言語レベルで使えそうですね、ありがたい
687 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:44:43.61 ] class nekoあったとして 下記をやるために用意しなければいけないnekoのメソッドって何ですか? const char* koe = "wan"; neko pochi = neko(koe);
688 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:46:02.33 ] メモリポインタ
689 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:46:56.73 ] C++は関数はあってもObjective-Cの様にメッセージの対になるメソッドは持っていない
690 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 03:01:36.67 ] C++11じゃない場合は is_rvalueで条件文分岐するのは無理なのでしょうか boostの中にもis_rvalueないみたいですし 例えばこんなことしたい template<T> struct glue { T & value glue(T & v):value(v) {} }; template<> struct glue<rvalue<float> > { float value; glue(float v):value(v) {} }; float f=10.2; glue<float> g1(f); glue<rvalue<float>> g1(2.3);
691 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 03:58:06.88 ] それだけだとこれでいいように見える template<T> struct glue { T value glue(T v):value(v) {} }; float f=10.2; glue<float&> g1(f); glue<float> g1(2.3);
692 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:58:03.71 ] boost.moveにrvalue判定できるマクロあったよね
693 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:37:33.46 ] C++の標準STLって覚えたほうがいいのか
694 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:38:47.45 ] STL覚えてないってことはC++の基本すら習得出来てないってことだろ
695 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:45:12.22 ] >>694 なるほど
696 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:10:27.44 ] インターフェースクラスのGetメソッドで サブクラスのフィールドのオブジェクトポインタを 返したいんだけどどうしたらいいですか? インターフェースクラスは複数のサブクラスに継承されて、それぞれのオブジェクトの定格は違う
697 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:29:30.05 ] コンパイル通らなくてもいいから どんなことしたいかソース書いた方がいい
698 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:45:35.96 ] >>694 C++に詳しそうだから聞こう。std::messageってLinuxだと gettextと同じカタログファイルでいいんだが、 windowsだと、どこのカタログから文字列取ってくるんだ?
699 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:54:16.40 ] STLならともかくlocale系なんてまともに使ってる人いるんだろうか
700 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:56:41.90 ] 多言語対応は大抵ICUまかせ
701 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:58:09.30 ] localeはvactor<bool>ぐらいのうんこ
702 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:12:53.22 ] >>697 あっ メソッドのおしりに=0をつければサブクラスでそのメソッドを定義できるんですね ありがとうございました
703 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:13:18.02 ] >>697 あっ メソッドのおしりに=0をつければサブクラスでそのメソッドを定義できるんですね ありがとうございました
704 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:15:22.58 ] メッセージカタログの仕様、MSDNで探しても見つからんな… つかVC++の日本語localeはゴミみたいな仕様なのでもしかしたら未実装なのか?^^
705 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:21:21.59 ] ttp://cpplover.blogspot.jp/2010/06/clocale.html ttp://cpplover.blogspot.jp/2011/04/boostlocale.html
706 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:28:38.43 ] std::message ←
707 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 22:47:28.40 ] >>704 stdcxx.apache.org/doc/stdlibref/messages.html#sec12 en.cppreference.com/w/cpp/locale/messages に書いてある rwstdmessages.catや/usr/share/locale/de/LC_MESSAGES/sed.moを探してみたら?
708 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:04:06.31 ] インタフェース インターフェース インタフェイス インターフェイス どれ派?
709 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:08:32.63 ] >>697 じゃなかった、返り値の型が定まらないです。 class Interface{ public: virtual Object GetObject() = 0; }; class hoge:Interface{ Object obj; public: hoge(Object obj):this.obj(obj){} };
710 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:15:37.27 ] >>708 google 約 1,510,000 件 約 3,400,000 件 約 363,000 件 約 2,550,000 件
711 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:19:41.67 ] >>710 yahooにしろよ
712 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 23:22:30.47 ] ヤホーで調べました