- 1 名前:デフォルトの名無しさん [2009/07/18(土) 02:54:58 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part70 pc12.2ch.net/test/read.cgi/tech/1244942050/l50
- 692 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 18:41:04 ]
- おまえはまだC++でマクロを使いたいのか。
- 693 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 18:55:01 ]
- はい。
- 694 名前:690 mailto:sage [2009/08/18(火) 19:13:22 ]
- >>692
「マクロって超便利!」 →「inline関数ってすげー! templateもすげー!」 →「やっぱりマクロにしか出来ないこともあるじゃん。両立が大事だよな。」 今の私はこの心境なんです。 例えば似たような演算子を一斉に定義するときなど、 #define MACRO(..., op,...) のようにしてopに演算子を入れたりとか まあ色々使い道はあるじゃないですか。
- 695 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:16:37 ]
- それはない。
- 696 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:18:52 ]
- ほとんど重複してるけどちょっと違うコードとかマクロ使っちゃうよね
- 697 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:23:13 ]
- 確かにね。MFCやATLのメッセージマップなんかはマクロの恩恵なしには実現し得ないしね。
Effective C++でもまだまだ必要な部分もあると認めてはいる。 でもやっぱり危険だから、なるべく使わないに越したことはない。でも使いたい? なら、他人のプログラム領域に踏み込まないように最大限の注意を払うべきだ。 自分の管理していないようなヘッダーに自作ヘボうんこマクロを混入させてしまうようなまねは厳に慎むべきで 自分の書くマクロは1翻訳単位内に限定し、ヘッダに宣言するような真似はやめにして もしヘッダに書くなら必ず末尾で#undefして、あるいはヘッダの冒頭に 「このヘッダファイルは俺専用だからお前のプロジェクトでインクルードするなよ?絶対するなよ?」 と注意書きをしておくべき。 なんだったらヘッダファイル作らないというのも手だ。 俺の書いた関数が使いたい奴は手書きで宣言しろ、と。
- 698 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:25:14 ]
- >>696
関数化するか、テンプレートを使うか、データ構造を見直せば、そんな気持ちの悪いことはしなくて済むと思う。
- 699 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:28:31 ]
- C++2003でvariadic templateをやろうとしたらプリプロセッサ使ってパラメタ変えながら
再帰#includeとかする必要もありますしね
- 700 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:50:20 ]
- 再帰リスト作ればいいじゃん
- 701 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:51:06 ]
- 嫌だね
- 702 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:52:52 ]
- まともなライブラリ(Boostとか)のコードを
お読みになれば、結構使われていることも ご理解いただけると思いますよ。 コンパイラ毎にコードをかえるためとかそれだけのため だけではありません。
- 703 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:00:01 ]
- 話し中すみません。
boost\date_time\int_adapter.hpp 等で (::std::numeric_limits<int_type>::max)(); と書かれているのですが、これはどうしてこの様な記法になっているのでしょうか?
- 704 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:00:44 ]
- より高級な機能がないから仕方なく使われてる、って以外に
マクロが重要になるケースって何かあるの?
- 705 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:04:07 ]
- >>704
基本的には「仕方なく」使われていますよね。 仕方なくじゃない使い方としては Boost.Preprocessor に代表されるプリプロセッサメタプログラミングがあるのではないでしょうか?
- 706 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:37:14 ]
- >>703
Boost本家スレで 773 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/28(火) 20:59:38 BOOST_PREVENT_MACRO_SUBSTITUTION っていうマクロはどういった用途で使う(or使われている)のでしょうか? そもそも定義されている部分すら見つけられません。。。 774 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/28(火) 22:14:07 boost/config/suffix.hpp にあるよ 775 名前:デフォルトの名無しさん[sage] 投稿日:2009/07/28(火) 22:15:44 >>773 prefix.hppで定義されてる 使い方は,たとえば某MSのヘッダファイルのように #define min(a,b) ... #define max(a,b) ... と定義されてあった場合, std::min(lhs, rhs) や std::max(lhs, rhs) や std::numeric::limits<hoge>::max() などの min, max がマクロで置換されてしまうけど, std::min BOOST_PREVENT_MACRO_SUBSTITUTION (lhs, rhs) と呼び出せばこれを防げる. つっても,冗長すぎるから普通は(std::min)(lhs, rhs)ってやるけどNE 776 名前:773 [sage] 投稿日:2009/07/28(火) 22:25:46 ありがとうございます。 理解出来ました! てな会話が行われていたよ。
- 707 名前:703 mailto:sage [2009/08/18(火) 20:44:37 ]
- >>706
ありがとうございます。 そうしますと、私がこれから定義するmaxテンプレートなども 全て(max)にした方が望ましいと言うことですよね。 ありがとうございました。
- 708 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:10:40 ]
- >>531
www.boostpro.com/vault/index.php?&direction=0&order=&directory=Function%20Objects ここのc_functionってのがおもしろい。 関数オブジェクトを関数へのポインタに変換してしまう代物。 ググれば日本語での解説も少しは見付かると思う。
- 709 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 20:29:32 ]
- #include <vecter>
とやっているのですがerrorC1083が出てしまいます VC++2008EEを仕様しています。 ちなみに#include <list.とかはエラーを出しません
- 710 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 20:33:03 ]
- ごめんなさいvectorでした・・・
- 711 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 20:35:48 ]
- (´ー`)
- 712 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 22:14:51 ]
- ウヒヒ
- 713 名前:デフォルトの名無しさん [2009/08/20(木) 00:40:25 ]
- このスレ過疎ってるな。
- 714 名前:713 mailto:sage [2009/08/20(木) 00:43:37 ]
- いや過疎ってなかったか。
見間違えた、
- 715 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 00:44:10 ]
- 過疎ってねーだろ
- 716 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 00:49:12 ]
- int foo(double val)
{ if( val == 0.0 /*その他重い判定処理*/ ) assert(false); //処理 } こんな関数があります。 この処理の部分で、valの値によってはfooを再帰呼び出ししたいことがあります。 その場合に単に普通に再帰呼び出しをしてもいいのですが、 再帰呼び出しでは無駄な処理(引数の範囲エラーチェックなど)を飛ばせるように フラグ変数をboolで引数に持たせる事はしても問題ありませんか?
- 717 名前:716 mailto:sage [2009/08/20(木) 00:51:58 ]
- つまり
int foo(double val, bool recursive_call = false) { if( !recursive_call && val == 0.0 /*その他重い判定処理*/ ) assert(false); //処理 } として、再帰時はfoo(val, true)とすることで無駄な処理を飛ばせるようにするのは 設計上まずいとかありますでしょうか?
- 718 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 00:58:16 ]
- liboctaveについて質問なのですが
Matrix型などで各要素でlong double型を扱うことはできますか? 標準だとdouble型になってしまうのですが・・・ できればやり方も教えていただけるとうれしいです
- 719 名前:718 mailto:sage [2009/08/20(木) 01:01:39 ]
- すいません
octaveのスレがあるようなのでそちらで聞くことにします それでは失礼します
- 720 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 01:10:34 ]
- >>717
無駄を飛ばすと言って無駄なフラグを足すのがアホっぽい。
- 721 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 01:15:38 ]
- int foo(double val)
{ /*無駄な処理(引数の範囲エラーチェックなど)*/ foo_r(val); } int foo_r(double val) { if( val == 0.0 /*その他重い判定処理*/ ) assert(false); //処理 foo_r(val); }
- 722 名前:716 mailto:sage [2009/08/20(木) 01:19:16 ]
- >>720
処理の無駄は実行時間の無駄ですが フラグ引数はコンパイル時間の無駄なわけですので 必ずしもおかしなことでは無いと思っております。 どうすればよろしいでしょうか? >>721 確かに処理を分けるのがよさそうですね。 ありがとうございます。
- 723 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 01:24:50 ]
- それ以前に重い処理を再帰すんな
設計を見直せ
- 724 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 01:27:01 ]
- >>722
> 処理の無駄は実行時間の無駄ですが > フラグ引数はコンパイル時間の無駄なわけですので 何を根拠にそんなこと言ってんの? 余計な引数があれば実行時間も食うしスタック消費量も増える。
- 725 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 01:27:45 ]
- 「増える」は言い過ぎた。
「増えてもおかしくない」だな。
- 726 名前:722 mailto:sage [2009/08/20(木) 01:56:45 ]
- >>723
再帰と言えば再帰ですが、最大で2回までの再帰でして これ以上軽量化は厳しい状況です。 >>725 > 処理の無駄は実行時間の無駄ですが > フラグ引数はコンパイル時間の無駄なわけですので は主として困る弊害をあげたものです。 bool引数が一つ増えたところで if( val == 0.0 /*その他重い判定処理*/ ) assert(false); を上回るほど実行時間は食いませんしスタック消費量も増えないと 思うのですが。 というか確定的だと。
- 727 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 07:50:58 ]
- >>726
最大2回までの再帰ってのがすでに何かおかしい気がする 関数の役割や関係を見なおしてみたら?
- 728 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:09:32 ]
- >>726
そんなに判定が重いなら、判定部分とその後の処理部分を別の関数に 分ければいいだろう。 そういう風に分けたら、結局再帰なんて必要なくなると思うが。
- 729 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:30:46 ]
- >>726
>> 処理の無駄は実行時間の無駄ですが >> フラグ引数はコンパイル時間の無駄なわけですので >は主として困る弊害をあげたものです。 引数にフラグを追加すると、コンパイル時間の無駄が「主として困る弊害」になるの? すごいコンパイラを使ってるんだなぁ。
- 730 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 09:25:33 ]
- 本当にその無駄が処理のボトルネックになってるならそういう書き換えをやるのもアリだろうが、
そうでなければ全く意味が無いぞ ちゃんとプロファイルとって調べたか?
- 731 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 09:29:58 ]
- compile time debugger
compile time profiler
- 732 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 12:12:13 ]
- class A{
int a; ... void func(){sizeof(*this);} }; class B : public A{}; Aの仮想関数func()内でsizeof(*this)したところ、サイズは128でした。 ところが、Bのfunc()での実行結果はクラスサイズが176なのに、Aと同じ128という結果でした。 Bのfunc()でも176というサイズを得るにはどのようにすれば良いでしょうか? B側でfunc()を定義し直せば解決するのですが、できればAのfunc()のみをいじって解決したいと思います。 環境はVC++2005です。
- 733 名前:732 mailto:sage [2009/08/20(木) 12:16:58 ]
- virtual void func(){sizeof(*this);}
でした。すみません。
- 734 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 12:19:43 ]
- >>731
TMPやってると欲しかったりする あるのかな
- 735 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 12:42:32 ]
- >>732
こんな感じの醜いコードを書くくらいしかできないと思う if (typeid(*this) == typeid(A)) { return sizeof(A); } else if (typeid(*this) == typeid(B)) { return sizeof(B); } else { throw std::runtime_error(); }
- 736 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 12:44:28 ]
- >>732
A の側では B の存在すら知らない状態だし、実行時型情報として sizeof を取り出す 標準的な方法も無いので、無理。
- 737 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 13:01:49 ]
- こういうのはだめ?
クラスBなどAの派生クラスにも、継承元をAからAImplBase<B>へと変更するという修正を加える必要があるけど。 #include <iostream> class A { char a[128]; public: virtual std::size_t this_size() {return sizeof (A);}; }; template<typename T> class AImplBase : public A { public: virtual std::size_t this_size() {return sizeof (T);}; }; class B : public AImplBase<B> { char b[128]; }; int main() { B b; std::cout << b.this_size() << std::endl; }
- 738 名前:732 mailto:sage [2009/08/20(木) 14:28:26 ]
- >735-737
回答ありがとうございます。 難しいようですね。勉強になりました。 >737さんの案を元にちょっと考えてみます。
- 739 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 18:06:11 ]
- MFC勉強してるんだけど動画の再生ってできるのかな?
フレーム取り出して一枚一枚ペイントしてくしかない?
- 740 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 18:12:59 ]
- >>739
Yes
- 741 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 18:13:07 ]
- >>739
DirectShowで再生するのが一般的かと DirectShowの質問は専用スレがあるからそっちでどうぞ
- 742 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 19:31:24 ]
- 動画再生するのが一番の目的じゃなくて
入力動画→処理→出力動画ってのを並べて同時再生とかできれば こんなに変わったんだよって分かりやすいかなと思ったんですよね とりあえずDirectShowについて少し調べてみますありがとうございます
- 743 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 21:34:53 ]
- きっと泥沼になる
- 744 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 21:39:45 ]
- 処理がリアルタイムじゃないならそんなに難しくないけど・・・
- 745 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 22:44:36 ]
- 配置のニュアンスとしては
入力動画1 入力動画2 合成動画 のように表示したいので MFC上で動画表示したいなと思ったのですが無理そうなら画像列で表示しようと思います
- 746 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 00:17:13 ]
- クラス設計に関しては割とましになってきたような気がするけど
クラス間の連携がどうもうまくいかない・・・ Mediatorとかためして見たんだけど、メディエータのメンバ関数が増えまくってしまう・・・
- 747 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 07:32:07 ]
- codepad.org/7lYft1tr
bad_weak_ptrが出ちゃう。誰か助けて。 ライブラリ側にBaseクラスがあって、何も変更できない。 やりたいことは、Derivedクラスのメンバ関数のファンクタを作りたい。 (コールバック用のファンクタがほしい) オブジェクトのライフタイムの関係上、 shared_from_this()の代わりにthisを渡したくない。 くそーわけわかめだぜ
- 748 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:00:30 ]
- >>747
enable_shared_from_this が2つあるからダメなんじゃないの? Base が変更できないなら Derived のほうは enable_shared_from_this つけなくて いいでしょ。
- 749 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:32:03 ]
- >>747こうすると、shared_ptrに捕まえられたファンクタがfに代入される。ただ、F()でF()のファンクタを作る意味がないけど。さらにfで保持すると参照カウンタが0にならなくなる。
ファンクタを作りたいなら、mainで bind(&Derived::F,d)とすればすむ筈。 #include <boost/bind.hpp> #include <boost/shared_ptr.hpp> #include <boost/enable_shared_from_this.hpp> #include <boost/function.hpp> typedef boost::function< void () > func_t; class Base { public: void N(){}; }; class Derived :public Base, public boost::enable_shared_from_this< Derived > { public: void F() { f = boost::bind( &Derived::F, this->shared_from_this() ); }; func_t f; }; int main() { boost::shared_ptr< Derived > d( new Derived ); d->F(); func_t x=boost::bind(&Derived::F,d); return 0; }
- 750 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:11:27 ]
- >>748
>>749 レスさんすこ。 単純に、enable_shared_(ryだと、 BaseクラスにFメンバ関数がないから、コンパイルが通らないから、 Derivedでも継承させた。 今ぶち当たってる問題を単純なコードに落としただけだから、意味は考えないでくだしあw >さらにfで保持すると参照カウンタが0にならなくなる。 メンバに自分自身を持たせるとダメなの? よくわからん。確かにdtorが走ってなかった・・・
- 751 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:00:57 ]
- >>747
Baseのenable_sahred_from_thisを活用する、つまりダウンキャストはだめ? class Derived : public Base { public: void F() { f = boost::bind( invoke_f, shared_from_this() ); }; static void invoke_f(boost::shared_ptr<Base> b) { boost::shared_polymorphic_downcast<Derived>(b)->F(); } func_t f; }; invoke_fはlambdaやbindで実装できるなら不要。 Baseに仮想関数がないなら、shared_polymorphic_downcastの代わりにshared_static_castを使えばいい。 あと、お前の例でも通用するか分からないが、安直にweak_ptrを使えば当然デストラクタも呼ばれるようになる。 void F() { boost::weak_ptr<Base> wp = shared_from_this(); f = boost::bind( invoke_f, wp ); }; static void invoke_f(boost::weak_ptr<Base> b) { if (boost::shared_ptr<Base> sp = b.lock()) { boost::shared_static_cast<Derived>(sp)->F(); } }
- 752 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:40:42 ]
- >>750
fがDerivedをつかんでいる限りDerivedは開放されない。fがDeriviedを放すのはDerivedが開放されるときだから。 DerivedでFのファンクタを保持する必要性はほとんど無いと思われるので、その辺を検討しよう。
- 753 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 23:51:26 ]
- 質問があるのですが、
以下のソースのように、例外をいっさい投げれない関数内で例外を投げる処理を書いていまして、 プログラムが異常終了するのを期待しているのですが、VC++2008のコンパイラだと例外をキャッチしてしまいます。 これって理由ありますでしょうか? ちなみに他のコンパイラ(bcc32, g++)では期待通りに異常終了します。 #include <iostream> using namespace std; void test() throw() { throw 0; } int main() { try { test(); } catch(...) { cout << "test\n"; } return 0; }
- 754 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:11:25 ]
- >>753
VC++の仕様。VC++は基本的に例外指定を無視する。 throw()も最適化のヒントになるだけ。 msdn.microsoft.com/en-us/library/wfa0edys.aspx
- 755 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:01:59 ]
- C++ Coding Standards 第75項によると
「強制されない限り、自分の関数に例外仕様を書かないこと」と書いてありまっする。
- 756 名前:753 mailto:sage [2009/08/22(土) 06:07:01 ]
- >>754, 755
どうもありがとうございました! すっきりしました。
- 757 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:00:03 ]
- >>753
以前vc9(betaだったかも)でいろいろ試したときは throw()つきの関数内で例外を投げるコードをreleaseビルドしたバイナリを実行したときは異常終了したと思う 嘘だったらごめん
- 758 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 14:09:05 ]
- >>755
その理由は? その関数が投げる例外が正体不明になったら普通困らないかな?
- 759 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 14:48:54 ]
- >>758
まずコストとして、 try-catchブロックが挿入される でそれが最適化の妨害をする 違反した際はunexpected_handlerに飛ぶだけになって、 指定しなかった場合において得られる可能性のある例外の情報は失われる 得られるものは動的なチェックだけ、 それも例外仕様に違反したら精々「違反した」だけ言って落ちるだけの貧相なもの 備考として、 テンプレートが関わるとどんな例外が来るかは定義時点では決定不能なので 適切な例外のリストを作ることは無理 こういう性質のもので関数が投げる例外が明確になる? 使う価値あると思う?
- 760 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:29:34 ]
- それってthrow()も駄目なのか?
まぁ別に大抵は書く必要も無いけどなthrow()なんて
- 761 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:59:06 ]
- throw()だけは価値がある場合もあるかもしれない、俺は書かないけどね
と書いてある
- 762 名前:753 mailto:sage [2009/08/22(土) 16:17:01 ]
- >>757
IDEを起動してreleaseで実行したところ異常終了しました。 違いがよく分かりませんが、debugにすると例外をキャッチしました。
- 763 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:52:10 ]
- デフォルトだと例外仕様違反するとunexpected()->terminate()->abort()が呼ばれることになってるから
異常終了するのが正常
- 764 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:15:05 ]
- throw(hoge)って書いても関数仕様変更すると広域に波及して変更が大変。労力に見合ったメリットってない気がする。
ただthrow()は例外安全を示すメリットはあると思う。 そういえばデストラクタにthrow()はなんで書かないんだろうか?
- 765 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:29:39 ]
- アホなコンパイラがtryブロック挿入する可能性があるから
- 766 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:09:44 ]
- 例外投げない保証は有用なのにthrow()がクソすぎるから
C++0xでnoexceptというのを型システムに組み込もうぜという話がある
- 767 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:15:56 ]
- allocator とか auto_ptr とか vector<bool> とか
どんどんゴミがたまっていきますね^^
- 768 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:54:45 ]
- おまえallocatorとauto_ptrなめんなよ
- 769 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:07:24 ]
- まあauto_ptrはunique_ptrに移行してdeprecatedの予定ですけどね
- 770 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:12:35 ]
- だがゴミではない。現行の規格では重要なものだ。
- 771 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:22:29 ]
- 同情の余地がないvector<bool>さんパネェ
- 772 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:32:02 ]
- おまえら予約語なのにスルーされてるexportさんに謝れ
- 773 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:35:31 ]
- export は普通に関数名とかに使いたいときがあって困るな。
キーワードは変に短縮されてるほうがいいんじゃないかとすら思うよ。 int とか const とか、まず自分で使う気にはならん。
- 774 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:38:16 ]
- まともな実装がないexportを何故標準に入れたのか
標準化委員会は狂っているとしか思えない
- 775 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:39:05 ]
- Comeauなめんな
- 776 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:00:12 ]
- >>747
コールバックのための関数オブジェクトはこれ Derived オブジェクトの外に配るんですよね? コールバックのための関数オブジェクトをメンバとして保持せずに 外に配るときに毎回作る + shared_ptr<Base> を downcast したものを持たせる, で良いのでは?
- 777 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 23:56:22 ]
- >>774
>435-436 時々で良いから、Comeauの事を思い出してあげて下さい
- 778 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 00:15:02 ]
- >>766
確かに、constメンバ関数と同じように例外安全性の指定ができればいいなーと思ったことはある C++ Sourceにテンプレートを使って実現する技法が投稿されてたけど、 あれを実践するのは正直ムリだと思った
- 779 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 00:34:50 ]
- export の実装ってそんなに難しいかなあ。
オブジェクトファイルにソースコード埋め込んで、リンカからコンパイラ呼べば 済むと思うんだけど。
- 780 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 00:37:50 ]
- >>779
よく分からんがそのお前の案とやらで gccでexportが実装できたら このスレの神プログラマとして あがめられるな。 すくなくともテンプレには確実に入る。
- 781 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 01:14:34 ]
- Comeauが3人年かけてexport実装して「もうやだ実装したくない」って禿に泣きついた話が
D&Eに載ってるから読むがいい
- 782 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 02:07:50 ]
- その話に関してはどちらかというと Exceptional C++ Style を紹介したほうが良いような?
- 783 名前:デフォルトの名無しさん [2009/08/23(日) 03:08:52 ]
- boost::functionの型引数について教えてください。
boost::function<int (int)>と宣言したときに、 どうやってシグネチャから戻り値の型と引数の型を取り出しているのでしょうか?
- 784 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 03:11:35 ]
- template<typename T>
class function<T()>{/******/}; template<typename T, typename U> class function<T(U)>{/******/}; template<typename T, typename U, typename V> class function<T(U,V)>{/******/}; ; とかやってんじゃないの 知らないけど
- 785 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 03:38:58 ]
- 全力でソース追いかければ何とかなるんじゃね、知らんけど
- 786 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 07:35:23 ]
- プログラミングエキスパートの皆さんの力が必要です。
どうかどうかツールを作っていただけないでしょうか。 もはや風前の灯状態のスレを救ってやってください。 yahooきっずで先生1位にして教育委員泣かそうぜwww yutori7.2ch.net/test/read.cgi/news4vip/1250954051/
- 787 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 07:37:58 ]
- H S P で や れ
- 788 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 07:41:18 ]
- 本気で宣伝するならまとめページ作ってそこのリンク張るようにしてくれ
vipのスレのリンクなんか張ってもすぐdat落ちして見れなくなってしまうじゃないか 本当に見る人のこと考えてないんだな
- 789 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 11:33:48 ]
- なんでさりげなく適切なアドバイスしてんだよw
>>783 >>784 をプリプロセッサで展開
- 790 名前:デフォルトの名無しさん [2009/08/23(日) 11:49:15 ]
- valarray<T>::apply(T func(T))が,ふつうの関数しか受け付けないのですが,
関数オブジェクトを関数へのポインタに変換する関数って標準で用意されていますか? つまりptr_funの逆関数はあるでしょうか?という質問です. (自分で書けば一行ですが,メソッドが増えるのはよくないでしょう) 唐突ですが,よろしくお願いします.
- 791 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:25:24 ]
- 関数オブジェクトは関数の形をしてはいるものの、
それ自身のアドレスは持ってないから逆関数なんてないよ
- 792 名前:デフォルトの名無しさん [2009/08/23(日) 14:06:41 ]
- なるほど.わかりやすい説明ありがとうございます.
|

|