【C++】template 統合スレ -- Part5
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNG以下のスレッドを統合するスレです。
STLスレッド
Part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
Part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/ (html化待ち?)
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html
【C++】template 統合スレ -- STL/Boost/Loki, etc.
http://pc2.2ch.net/test/read.cgi/tech/1037795348/
【C++】template 統合スレ -- Part2
http://pc2.2ch.net/test/read.cgi/tech/1047978546/ (html化待ち)
【C++】template 統合スレ -- Part3
http://pc5.2ch.net/test/read.cgi/tech/1066493064/
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/
関連スレ、その他リンクは >>2-5 あたりに。
0002デフォルトの名無しさん
NGNGC++相談室 part29
http://pc5.2ch.net/test/read.cgi/tech/1082047479/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
リンク
STLPort
http://www.stlport.org/
boost
http://www.boost.org/
Loki
http://freshmeat.net/projects/lokilibrary/
http://www.geocities.com/rani_sharoni/LokiPort.html
ISO/IEC 14882
Programming languages -- C++
http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
http://www.kuzbass.ru/docs/isocpp/
0003デフォルトの名無しさん
NGNG・boost info
http://user.ecc.u-tokyo.ac.jp/~g940455/wp/boost/
・boost::spiritっちゃえ!
http://www.c3.club.kyutech.ac.jp/~gridbug/spirit/
・Let's boost
http://www.kmonos.net/alang/boost/
・Regex
http://www.s34.co.jp/cpptechdoc/article/regexpp/
・Boostを使おう
http://www.emaki.minidns.net/Programming/tools/Boost/
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG・テンプレート
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
Modern C++ Design
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/
C++ Template Metaprogramming
http://boost-consulting.com/mplbook/
・Boost関連
Boost C++ Libraryプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4798007862/
The Boost Graph Library
http://www.amazon.co.jp/exec/obidos/ASIN/0201729148/
・STL
Generic programming―STLによる汎用プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756134416/
Effective STL
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/
STLによるコンポーネントデザイン
http://www.amazon.co.jp/exec/obidos/ASIN/475613422X/
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1091520997/l50
こっちの方が先に建ったので誘導。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG0012age
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGスレの流れ的には問題ないと思う。
ただ、今あるスレ建てテンプレを相談室のテンプレにそのまま追加でよいのかが気になる。
0016デフォルトの名無しさん
NGNG今まで使ってなかったんですが Effective C++ に「<stdio.h> ではなく <iostream> を使おう」
という記述があり力強く使うことを推奨してるんで使ってみようかな
と考えているんですが、その構造上どう考えてもスレッドセーフじゃない気がするんですが・・・
0017デフォルトの名無しさん
NGNGcstdioはスレッドセーフなの?
スレッドセーフじゃなくなってしまうであろう構造とは具体的にどこ?
001816
NGNG> 構造とは具体的にどこ?
・std::cout の実体がひとつしかない
・std::cout がバッファリングしている
実際にやってみたところ、下記のような感じで見事に出力がぶっ壊れました
std::cout 版の出力
Thread 実行中((thread1)
Thread 師hread2)
Thread 実タ行中 (thread1)
Th行中 (thread2)
printf 版の出力
Thread 実行中 (thread1)
Thread 実行中 (thread1)
Thread 実行中 (thread2)
Thread 実行中 (thread2)
コンパイラVisual C++、STLはVisual C++にはいっていたやつ
でしか試してないんですが、別な環境だと大丈夫だったりするんでしょうか
001916
NGNG(実験用コードなんで無限ループさせてるのは平にご容赦)
DWORD ThreadEntry( void* param )
{
std::string unique = reinterpret_cast< char* >( param );
while ( true )
{
std::cout << "Thread 実行中 (" << unique << ")" << std::endl;
// printf( "Thread 実行中 (%s)\n", unique.c_str() );
}
return 0;
}
それぞれ引数 "thread1" "thread2" で2本スレッドを起動しました。
0020デフォルトの名無しさん
NGNG> ・std::cout の実体がひとつしかない
> ・std::cout がバッファリングしている
そんなのはcstdioでも同じこと。stdoutの実体は一つだろうし、バッファリングもあり得る。
スレッドセーフではないと判断する理由としてはおかしい。
>>19
> std::cout << "Thread 実行中 (" << unique << ")" << std::endl;
この行はstd::coutへの出力を3回に分けて実行しているなど、
やっていることが異なってしまっているので、比較のためには
std::cout << ("Thread 実行中 (" + unique + ")\n");
などに変えて試してみる必要がある。
まぁ出力結果を見る限り、たぶんダメなんだろうな。
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGスレッドに対してコードが安全ってどういうこと?
0023デフォルトの名無しさん
NGNGそれとコードの中身が 再入可能(reentrant) であるということは別問題。
cout をいつからいつまで使うかを決めるのは設計者の仕事ってことだよ。
0024デフォルトの名無しさん
NGNGコードの中身って、coutの実装のことかい?
あと、それら2つの問題の区別が>>16-の話のどこにどう関係有るの?
0025デフォルトの名無しさん
NGNG通りすがりで>>16は見てなかったのですまん。
002623
NGNGいつからいつまで使いたいのか考えればすぐわかることだよ。
0027デフォルトの名無しさん
NGNG意味がわかりません。
0028デフォルトの名無しさん
NGNG標準出力に対する排他とコードがスレッドセーフかどうかを混同するなってこと。
こんなこともわからないようならプログラム書くの辞めたほうがいいよ。
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGたとえば、
排他をかける対象:標準出力
いつからいつまで使いたいのか:プログラム起動から終了まで
これだけの情報で「スレッドセーフかどうか」が「すぐわかる」と言うのか?
そんなわけないだろ。
>>26の意味が>>28だっていうのも、飛躍しすぎじゃない?
「コード」「排他」「スレッドセーフ」の意味が
それぞれ曖昧なままなのが噛みあわない原因だと思う。
003123
NGNG定義2:coutが呼ばれてる間、バッファを壊さずに安全にメソッドを実行できるることをスレッドセーフという。
さぁどっちだ。
0032デフォルトの名無しさん
NGNG003323
NGNGでとっちなんだよ。
0034デフォルトの名無しさん
NGNGあのな、定義ってのは既に定義された言葉で組み立てないと意味がないんだよ。
雑談だから多少は大目に見るとしても、
「画面を壊す」「バッファを壊す」それぞれの意味くらいは
もうちょっと説明してもらわないと、エスパーにしかわからないよ。
ひとことも「スレッド」が出てこない「スレッドセーフ」の定義も、たぶん無理だと思うし。
だいたい「スレッドセーフ」なんて言葉は文脈によって変わるから、
話す人がきちんと定義しないと会話にならない。
相手に決めさせていいものじゃないはず。
0035デフォルトの名無しさん
NGNGシングルスレッド環境における一回のoperator<<呼び出しによる出力結果を「正しい出力」として、
マルチスレッド環境においてそれぞれのoperator<<の呼び出しに対して、
「正しい出力」が互いに割り込まれずに得られること。
という感じでいいんじゃないだろうか?
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG同意。
ついでに>>16の質問を
「std::cout ってスレッドセーフなんでしょうか?」
ではなく
「std::basic_ostream<> ってスレッドセーフなんでしょうか?」
に修正しておいた方がいい気がする。
これでもけっこういい加減ではあるが、だいぶましかと。
003823
NGNG0039デフォルトの名無しさん
NGNGだから、それじゃエスパーにしか伝わらないって言ってんだろ。
もうちょっと自分の文章を客観的に見直してから書き込め。
それができないなら、もう寝たほうがいい。
0041デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNGあるスレッドがあるバイト列を突っ込むとその通りの順序で出力される、
ということしか決めてないんじゃないの?
operator<< 1回を単位として出力とか、そんなことはわからないんじゃない?
で、スレッドセーフ性は、複数のスレッドから任意のタイミングでcoutにアクセスしても、
こけたりせずに上の仕様を満たした正常動作を行なう、というだけなのでは。
>>18の出力って別にブッ壊れてないよね。
適当にマージされてるから画面は乱れるけど、1つのスレッドが出してる出力に関しては正しい順序で出てるじゃない。
それをスレッドセーフじゃないと言うのは自分にはかなり奇異に映る。
16の期待する動作がしたいのだったら、ロックとflush()を使って
何とかせよ、ということだと思うのだけど。
004423
NGNG>で、スレッドセーフ性は、複数のスレッドから任意のタイミングでcoutにアクセスしても、
>こけたりせずに上の仕様を満たした正常動作を行なう、というだけなのでは。
ここでいうところの「こける」とは何?画面出力が乱れること?それともプログラムが異常終了するってこと?
0045デフォルトの名無しさん
NGNG未定義動作に突入しない、仕様通りの動作を行なうことを「こけない」と表現してます。
こける動作の代表が異常終了だけど。
画面出力が乱れるのは仕様通りですよね。
0046デフォルトの名無しさん
NGNGSun C++のiostreamなら、MT-Safe。
http://docs.sun.com/db/doc/802-3045/6i6vgg2rk?l=ja&a=view
0047デフォルトの名無しさん
NGNG004823
NGNGhttp://www.microsoft.com/JAPAN/developer/library/vccore/_core_library_support_for_multithreading.htm
それによく見ろよ。>>19のソースを見る限りprintfがスレッドローカルの関数を呼んでるのに、coutは親
スレッドから渡さたものを使ってる。でこれでcoutはスレッドセーフじゃないとか言われてもとっても困る。
16のやり方がまちがってるじゃん。
0049デフォルトの名無しさん
NGNG親スレッドから渡されたもの : unique
おまえもう良いから消えナ
005023
NGNG005123
NGNGリテラルを出力するとどうなる。
0052デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG最後にはそうやって逃げるんだねw
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG005716
NGNG変なマージのされ方をしていた原因は単にシングルスレッド用のライブラリをリンクしていたためでした。
とはいうものの
printf( "hoge %s\n", str );
↓
std::cout << "hoge " << str << std::endl;
では >>20 のご指摘通り printf では一回で出るものが std::cout では複数回になってしまうため
boost の format みたいなの作って何とかするか stdio.h を使い続けることにします。
どうもお騒がせしました。
0058デフォルトの名無しさん
NGNGstd::ostringstream でまとめてから出力すればどうか。
std::ostringstream os;
os << "hoge " << str << std::endl;
std::cout << os.str();
0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG0062お仕事探していまつ ◆y3A2MadQ16
NGNGC++のテンプレート・メタ・プログラミングを利用して
コンパイル時にdoubleやfloatの計算ができるライブラリを作ってみた。
取り敢えずはコンパイル時計算によるFFTコードの最適化という自分の研究のために作ったので
今のところ四則演算と整数との変換とsinhp()の計算しかまだ実装してないし、
丸めは直近だけだしNaNとか非正規化数とか実装してないんだが…。
ちゃんと整備したら使う人いそうかな?
(…これしかしもしかして車輪の再開発だったりしないだろうな?(不安))
0063デフォルトの名無しさん
NGNGあやしいな。
struct pi { static const double value = 3.14・・・・
とかやってるのか?
0064お仕事探していまつ ◆y3A2MadQ16
NGNGそれができてついでにstatic connst doubleも定数式として計算してくれていれば
苦労は少なかったんですけどね。
(もっというならtemplateパラメタに渡せれば根本的に解決しますが、
浮動小数点数の同値には多くの場合あまり意味がないのでそれが実現されていない理由も分ります。)
クラス/構造体にstatic const doubleなメンバはそもそも持たせられないのでして。
template<int sign, int exp, typename fraction>
struct StaticReal{
static const int s = sign;
static const int e = exp;
typedef fraction f;
};
って感じです(実際は精度を指定するテンプレート・パラメータとかいろいろありますが)。
小数部をあらわすfractionが基本型でなく
typedefになっているのはIEEE準拠のdoubleの実装には
64bitを超える結果を返す正確な整数演算が必要だったため、
それもクラス・テンプレートで実装する必要があったからです。
具体的な各浮動小数点数値はこのテンプレートの特殊バージョンとして与えられます。
0065デフォルトの名無しさん
NGNG今はpi=3でつ! おまい時代遅れでつ!
0066デフォルトの名無しさん
NGNG0067お仕事探していまつ ◆y3A2MadQ16
NGNG浮動小数@プログラム
http://pc5.2ch.net/test/read.cgi/tech/1045772555/477-484
でもうちょっとだけ詳しく書きました。
>>66
ドメイン名の長さ的にクリックするのが躊躇われるURLだなー。
最近のDNSやブラウザは大丈夫なんかもしれんがー。
そのうえISDNではDLが若干辛い。
0068デフォルトの名無しさん
NGNG宣伝も良いけどさ、踏み込むならスレ統一しろよ
0069デフォルトの名無しさん
NGNGいや それだけですが
0070お仕事探していまつ ◆y3A2MadQ16
NGNG現状では宣伝できるほど整備できてないんでアレですが。まだ公開もしてないし。
浮動小数点とテンプレートという普段はあまりリンクしないであろうトピックに跨ってるのでどっちに絞ったものか。
個人的には浮動小数点演算の実装としての側面はあっちで、
テンプレート・メタ・プログラミングの例としての側面はこっちでと思っているのですが。
0071デフォルトの名無しさん
NGNG別に貼らなくていいよ。無職なんだろ?悪い事はいわんから他の業界目指せよ?
0072お仕事探していまつ ◆y3A2MadQ16
NGNG誤解のないように言っておくと
まぁ求職中なのはハンドルにも書いてるとおりで本当だけど今回の話題とは別に関係ない。
単に自嘲的に名乗ってるだけ。
そもライブラリも自分で使うつもりで作ったけど別に商売目的で作ったわけではないしな。
このスレに書いたのは純粋にテンプレート・メタ・プログラミングで
浮動小数点演算を使えるようにする話がしたかったからであって
別段宣伝したいわけではないよ。
0073デフォルトの名無しさん
NGNGageた上、ああいういい方する奴は
無視でOK
0074デフォルトの名無しさん
NGNG自嘲したけりゃ部屋で一人で勝手にしててくれって感じ。
0075デフォルトの名無しさん
NGNGお前も広告の裏にでも書いとけよ。な。
0076デフォルトの名無しさん
NGNG>ちゃんと整備したら使う人いそうかな?
います。で?
0077デフォルトの名無しさん
NGNG>浮動小数点演算を使えるようにする話がしたかったからであって
(´-`).。oO( 空想科学だろう… )
0078デフォルトの名無しさん
NGNGそれってさ、
double d = 0.707; // means sin(pi/2)
って書く代わりに
double d = STATIC_SIN(3.14/2);
みたいに書けるから、ソースの可読性が上がるってこと?
それとももっと良い使い方があるの?
0079デフォルトの名無しさん
NGNG例えばここではFFTに用いるsin/cosの計算に級数展開を用いていて
即値が埋め込まれることを期待していますけれど
こういうのに使うのを想定しているんじゃないですかね?
0080デフォルトの名無しさん
NGNG昔からある「三角関数テーブルをあらかじめ作成しておく」ってのをtemplate programmingでやろうってことだね。
やっぱりソースの可読性くらいしかないのかな、メリットは。
あと、テーブル作成機能をソースに埋め込めるので一元管理できるとか?
0081デフォルトの名無しさん
NGNG能書きはいいから公開してみろよ。ソースも示せないんではただの妄想だと
思われても仕方ないぞ。
0082デフォルトの名無しさん
NGNG妄想と思い込みたい人間が妄想と思い込むだけの話です :-P
0083デフォルトの名無しさん
NGNG俺の世界とは接点が無い。
0084お仕事探していまつ ◆y3A2MadQ16
NGNG今回、やったこと全体としてはもうちょっと色々ありますが、
まぁ、今回開発浮動小数点演算に関しては用途は殆どそれです。
FFTのループを展開するようにメタ・プログラミングした中でFFTの回転因子の計算に使いました。
(他の色々は論文誌に投稿中のレポートの当落が
ハッキリしたらドキュメントを公表できると思います。
大雑把に言うとFFTWモドキをやりました。)
ただ級数展開をバカ正直に計算したらコンパイルがむちゃくちゃ重かった(g++2.x系)ので
最良近似で展開済みの式でsin関数は書いてしまいましたが。
>>80
テーブルで言えばコンパイル時に生成する感じになるので、
例えばFFTの場合なら要素数が変わっても対応できます。
可読性自身はC++テンプレート・メタ・プログラミングの常としてよく言って微妙なセンですが、
必要な値だけをコンパイル時に精度良く生成できるので、テーブルをメンテナンスするよりは楽でしょう。
>>81
広く一般に使える形で公開するにはやらないといけないことがまだまだあろうと思って
(とりあえず動かすということ優先だったので直したり作り足したりしないといけない部分はある。)
WWWにうpするといったことはまだしてないけれど、興味があるトピックを言ってもらえれば
関連部分のソースは出してもよかですよ?
0085デフォルトの名無しさん
NGNGうp「したいなら」すればいいし、完成させてからWEBで公開すればいいだけでは
なんかちょっと自意識過剰なんでないの
0086デフォルトの名無しさん
NGNG同意。
別に妄想だとかは思わないけど、珍しい話題じゃないし、どうしろと?
誰かがURL挙げてたけど、Expression Templatesとか、
計算分野でのtemplate programmingの話題は既にあるもんね。
公開するとか、技術的な質問があるとか、一緒に作りたいとかさ、何がしたいの?
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG「詳細はまだ言えないけど、ものすごい発見をしました。」だけでは、
聞く方としたらトンデモ科学とかインチキ宗教にしか聞こえない。
それがプレゼンというものだ。
0093デフォルトの名無しさん
NGNG> 「詳細はまだ言えないけど、ものすごい発見をしました。」だけでは、
> 聞く方としたらトンデモ科学とかインチキ宗教にしか聞こえない。
ZeroSyncのことかー!!
0094デフォルトの名無しさん
NGNGなつかしい
0095デフォルトの名無しさん
NGNG0096お仕事探していまつ ◆y3A2MadQ16
NGNG珍しい話題でないということは
コンパイル時浮動小数点数値計算の前例があるということなわけですね。
ご存知ならばお教えいただきたく候。
元々見つけられなかったがために自分で書くハメに陥ったので、
既存のものがあれば利用したいです。
先行してるなら多分私のより完成度高そうですし。
>>92
掲示板環境で普通にプレゼンやったら長すぎると思うので
「〜はおかしい」とか「〜はどうなっとんねん?」というツッコミがあったら答えようという
Lazy evaluationでと思った訳です。
で、その出発点が>>64だったということです。
>>64のように浮動小数点数値を表すことさえ決めたら後は
アルゴリズムの方は割と正直にKnuth本の通りに
テンプレート・メタ・プログラミングの定石に従って実装しただけなんで…。
>>87-90
まぁ、なんていうか今身近に
C++テンプレート・メタ・プログラミングの話ができる友達や仲間がいないもんで
寂しいわけなんですよ。仰るとおり無職だからw。
発表に行けるほどのネタならば行けばいいんですが、
浮動小数点演算単体では「作ってみました。どうでショウ。」程度の小ネタですしね。
0097お仕事探していまつ ◆y3A2MadQ16
NGNG「ものすごい発見をしました。」ってほどのことでもない
聞いたほうも「ああ、そうやったの。ふふん。」ってくらいの軽い話題のつもりなんですが、
そんなに想像の範囲からハミ出ていますか?
----
ところで、テンプレート・メタ・プログラミング共通の話題として
デバッガとか使えない上に再帰の終了条件間違うとコンパイルが終わらなかったり
(長く待てばいつかはメモリがなくなったり再帰の深さ制限にかかって帰ってきますが)
とデバッグには苦労するわけですが、皆さんはどうしてらっしゃいますか?
何か工夫がありましたらお聞かせ下さい。
私はせいぜい展開されると存在しないメンバを参照するなど、
エラーを故意に起こすクラス・テンプレートをprint文代わりに
エラーメッセージでデバッグする程度のことしか知らなかったのですが…。
0098デフォルトの名無しさん
NGNG》浮動小数点演算単体では「作ってみました。どうでショウ。」程度の小ネタですしね。
子ネタでこれほどまでに引っ張れるのも大した才能だが
無職は友達いない言い訳にはならなぇべ (´ー`)y−〜〜
0099デフォルトの名無しさん
NGNG> 無職は友達いない言い訳にはならなぇべ (´ー`)y−〜〜
イヤミ過ぎてワラタ
0100お仕事探していまつ ◆y3A2MadQ16
NGNG「身近に」←これ重要。
身近な友達はC++に疎く、C++に詳しい友人・知人は遠隔地だったり忙しかったり。
当方C++に関するヨタ話をする相手に飢えている哀れな失業者なわけですよ。
まぁ、大ネタだとどうせ何らかのドキュメント書くことになるんで、
掲示板でヒョイと振るには小ネタくらいが適当かなと。
「引っ張る」に関しては話し相手に飢えた哀れな失業者としてはレスがつけばホイホイとw。
>>91
いろいろ不備があって辛うじて動くという状態なので公開するのは恥ずかしいレベルですが:
ttp://www.nerimadors.or.jp/~kando/FFTemplate/index.html
のRealTemplateの方がそれです。
0101デフォルトの名無しさん
NGNG四則演算程度なら最適化しないコンパイラはないだろうし,
sin,cosのコンパイル時計算(これが本命だと思いますけれど)なんて
少なくとも自分には(知識ないからですが)FFTの回転因子の計算しか用途が思いつきません.
そういう特殊用途だけしかないものにここまで大仰なフレームワークを用意する必要があるのか
自分には疑問なんですが.ぶっちゃけ展開級数をコードにべた書きしてはダメなんですか?っていう.
それに1つの浮動小数にクラステンプレートのインスタンス1つを割り当てる実装ですけれど,
これを本格的に使うと途端にインスタンス数が爆発して,
(少なくとも現在の多くのコンパイラでは)利点よりも欠点が勝るように想像するんですけれど
そこらへんはどうなんでしょうか?
これらを踏まえた上で,なおかつこのフレームワークで出来て他では出来ない
何かがあるんだとしたら,それはすごく有意義だとは思うんですが・・・
0102デフォルトの名無しさん
NGNGたぶん楽しいとか興味とかそういった動機だと思うよ。
0103デフォルトの名無しさん
NGNGFFTの回転因子だって、データ長がコンパイル時に決まらないと使えない。
だからやっぱり、何に使うかよくわからない。
おもしろうそうってのには同意するけどね。
0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNGその構造体のメンバにはポインタがあってそこにnewして文字列を保持させるつもりです。
またデストラクタでこのポインタをdeleteします。
使い方としてはこの構造体をリストにpush_backする前にローカルのStructA型の変数を用意し、
これにデータをつめ終わった後でリストにpush_backします。
ここで問題があります。このローカルの変数がスコープを外れるとメモリを開放してしまうのです。
ここで悩んだのですが、こういう場合この構造体にコピーコンストラクタと代入演算子をオーバーロードして
文字列用のメモリを作り、memcpyで文字列をコピーしてやるべきなのですか?
#CStringなどでもそうなっているのかな?
0108デフォルトの名無しさん
NGNGあたりまえだ。
つーか素直にstd::string使っとけ
0109デフォルトの名無しさん
NGNGやはりそうでしたか。サンクス。
実は文字列というかバイナリデータを入れることもあるもので。
0110デフォルトの名無しさん
NGNGstd::vector<char> 使え。おまえのレベルではポインタは危ない。
0111デフォルトの名無しさん
NGNGboost 標準化マダー チンチン
0112デフォルトの名無しさん
NGNG危なくないと思うよ?別に問題点にすぐ気がついているしね。
STLを使った効率的なプログラミングに関しては確かに経験が浅いけどね。
0113デフォルトの名無しさん
NGNGデストラクタで明示的なリソースの破棄を必要とするクラスは、
かならずコピーコンストラクタ、代入演算子も必要とする
とおぼえておけばよし。
0114デフォルトの名無しさん
NGNGlist < ClassA* > Alist;
ClassA pA = new ClassA( "hoge" );
Alist.push_back( pA );
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNGAlist.push_back(new ClassA("hoge"));
直接こうでいいだろ。
0117デフォルトの名無しさん
NGNGstd::list<boost::shared_ptr<ClassA> > Alist;
Alist.push_back(boost::shared_ptr<ClassA>(new ClassA("hoge")));
0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG| ゜Θ゜) < そうでもないよ。
| ∵ つ \___________
0120デフォルトの名無しさん
NGNG>>117の方がいいんじゃないか。new ClassA("hoge")が
成功したあとにAlist.push_back()が失敗したらそのメモリを
誰が回収するんだ?
0121デフォルトの名無しさん
NGNG大人だなあ。
でもその失敗は,メモリーのアロケーションと違ってロジックにとって致命的な予感...
0122デフォルトの名無しさん
NGNG質問です。どうやってBoostをビルドしていらっしゃいますか?
教えてください。こちらではうまくできていないので、参考に
したいです。
>cd "C:\Program Files\Microsoft Visual C++ Toolkit 2003"
>vcvars32.bat
>set MSVCDir=C:\Program Files\Microsoft Visual C++ Toolkit 2003
>cd C:\boost_1_31_0
>bjam "-sTOOLS=vc7.1" install
このようにしています。
0123デフォルトの名無しさん
NGNG鯖がベルギーにあるためなかなか落ちません。援軍よろしくおねがいします。
0124デフォルトの名無しさん
NGNG具体的にどのようにビルドできないのか教えてもらわん事にはどうしようもない。
コンパイラが見つからないのか、コンパイルでこけるのか、リンク時に失敗するのかとか。
あとエラーメッセージも。
0125122
NGNGLINK : fatal error LNK1104: cannot open file 'msvcprtd.lib'
LINK : fatal error LNK1104: cannot open file 'msvcprt.lib'
とあるのですが、ハードディスク中を探しても出てこないのです。
0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNG文献によりますと、allocatorは同じテンプレートクラスにおいて
等価でなければならいらしいのですが、operator ==とoperator!=を定義して、
つねにtrueとfalseを返すようにしてもローカルなメンバは保持したらダメなのでしょうか?
0128デフォルトの名無しさん
NGNGttp://www.kuzbass.ru/docs/isocpp/lib-utilities.html#lib.allocator.requirements
a1 == a2 の結果は "returns true iff storage allocated from each can be deallocated via the other" とされている。
データメンバを持つなら、 a1 == a2 が true にならない場合があるんじゃない?
0129デフォルトの名無しさん
NGNGというか,標準のコンテナに食わせられるAllocatorはインスタンス毎に固有の状態を持てない,
要するにローカルなメンバは持てないという結論になります.
何故こんな厳しい制限を要求する必要があるのかについては例えば「Effective STL」の第10項が詳しいです.
0130デフォルトの名無しさん
NGNGなぜアロケータを作るのかといいますと、某APIのメモリプールを使いたいからなので、
deallocateは常に成功します。(実際にはなにもしないので)
>>129
それで得た知識を伝授して頂ければありがたいのですが、そうくるなら、読んでみます。
0131デフォルトの名無しさん
NGNGrebindされたとき、データメンバはどうなるの?
0132デフォルトの名無しさん
NGNG秘密にされると気になる。
某APIってコレクションとかの話?
0133デフォルトの名無しさん
NGNG使いづらいな。型にハマると楽なんだけどな。
0134デフォルトの名無しさん
NGNG詳しく
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNG「Ancient C++ Design」になるの?
それとも、すでになってる。
0141デフォルトの名無しさん
NGNGあと二週間とロスタイム分くらいで
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNG部分特殊化はokなんでしょうか?
0144デフォルトの名無しさん
NGNG0145強制移動
NGNGLinuxデスクトップ市場制覇のためには その12
http://pc5.2ch.net/test/read.cgi/linux/1094205751/481
481 名前:login:Poelina[chage] 投稿日:04/09/13 12:44:31 ID:nhse+q8c
ここで問題になるのは、作ったアプリが、
どれだけ多くのマシンで動いてくれるのか、だな。
コンソールレベルなら、Cの標準ライブラリで動くようになるけど、
Xを使うと独自のライブラリだからねぇ。
とりあえず、GTKに的を絞るべく、本を買ってはみたが・・・
482 名前:login:Penguin[] 投稿日:04/09/13 12:49:56 ID:N7RA+dWB
>>481
テンプレートベースならほとんどの環境で動く。
意外なことにサイズもそれほど大きくならない。
プログラムのサイズより大抵スタックのほうが大きいでしょ。
ヒープはもっともっと大きい。
気にしないでテンプレート使っちゃえばいいと思う。
Windowsもそうなってるし。
0146デフォルトの名無しさん
NGNG実際どうなんでしょうね?ていうかどうやるんだろう…
0147デフォルトの名無しさん
NGNG複数の配列で実現してdequeにしてるんでしょ。
一つだとサイズを拡張しにくいから。
というか他にどうやってやるんだ…
0148デフォルトの名無しさん
NGNGgccやSTLportのソース読めば?
0149デフォルトの名無しさん
NGNG>147
GCCのはリングバッファじゃないですよ.
前方にも未初期化なバッファを確保するvectorのイメージが近いです.
というか配列の配列を使ってるのって単に効率化のためだけで,
別にdequeの本質的な部分(前方に定数償却で挿入できる,など)には
全然関係ないような気がするんですけれど,どうなんでしょう?
0150デフォルトの名無しさん
NGNG0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNGどういう便利な使い道があるのか教えて
0153デフォルトの名無しさん
NGNGあえて意識して使うまでもないだろ。
日頃からどれだけのたくさんの不純物を
シャットアウトしてくれてると思ってるんだ。
その時点でSTLより上。
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG仕様なのでしょうか?
あと、RandomNumberGeneratorは自分で作成しないといけないのでしょうか?
0156デフォルトの名無しさん
NGNG「ランダムにならない」が、「プログラムを複数回起動しても
同一の並べ替えが起こる」を意味すると仮定して回答する。
random_shuffleは乱数生成器としてデフォルトでstd::randを使うから、
毎回違う結果がほしければ、random_shuffleを使う前に毎回違う値でstd::srandを呼ぶべし。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNG| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | /devは重い
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG大抵のOSの大抵の言語の大抵の処理系では、
srand 相当のものに同じ seed を渡すと(あるいは srand 相当のものを使わないと)
乱数を使うと毎回同じ数列が返されるようになってます。
乱数を利用するプログラムを作るとき、実行の度に違う値がでてると、
単体テストやらアルゴリズムの効率の比較やらプロファイリングに基づいた
チューニングとかしにくいから。
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG当然 mt でも事情は同じ。っていうかこれは利点なんだけど・・・
0166デフォルトの名無しさん
NGNG> 単体テストやらアルゴリズムの効率の比較やらプロファイリングに基づいた
> チューニングとかしにくいから。
あたかもそれを理由にそのような仕様にしたといわんばかり
しかし実際は疑似RNGから導かれる当然の結果に過ぎない
因果の誤解は思考力の不足を証明する
0167not 163
NGNGAPI的は、seedを自動で、って選択もあったんじゃない?
# 例えば、大昔のMS-BASIC
渡すようにしてるのは、>>163にある理由もその一つでしょ。
0168デフォルトの名無しさん
NGNG俺は163じゃないけど。
それを理由にそのような仕様にしたんだよ。srandの規格を嫁。
でもrandがグローバルだから使いにくいけどね。
0169デフォルトの名無しさん
NGNGそれを理由にそのような仕様にしたんだよ…
0170デフォルトの名無しさん
NGNGttp://www.lysator.liu.se/c/rat/d10.html#4-10-2
0171デフォルトの名無しさん
NGNG「単体テストやらアルゴリズムの効率の比較やら
プロファイリングに基づいたチューニングをしやすいように」
という人間の要望から発生した?
人間の要望に応じて数学的現象が定まるのはおかしいな。
ピタゴラスの定理は誰かがそれを望んだからそうなったと言うタイプはどこにでもいるが。
0172デフォルトの名無しさん
NGNG> それを理由にそのような仕様にしたんだよ。srandの規格を嫁。
163を翼嫁
「srand相当のもの」だ
疑似RNG全般についての話
疑似RNG全般の性格をその一部であるsrandの規格から規定するな
0173デフォルトの名無しさん
NGNGAPI設計の話をしていることが理解できない頭の人。
0174デフォルトの名無しさん
NGNGスレ違いの上にウザイから下げて書けヴォケ
0175デフォルトの名無しさん
NGNGこういう、知識は豊富だけど頭が悪い人、っているよね。
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGはじめからAPIの話だと思ってました。
0178デフォルトの名無しさん
NGNGMS BASIC はかなり初期のものから RANDOMIZE で seed を与え(られ)る仕様だよ。
実行毎に自動的に seed の初期化はされないけど、それは変数の値も含めて
全ての環境が残るっていう BASIC インタプリタの特性をひきずってるから。
0179デフォルトの名無しさん
NGNG処理系(ライブラリ)が勝手に seed を変えたりはしない、というAPI の仕様の話をしてます。
だって発端が >>151 だし。んで一般アプリケーションはどう振舞うべきかというと>>156 で
回答が出ているわけで、なんとも終わった話であることであるなぁ・・・
0180デフォルトの名無しさん
NGNG>>155 じゃねーの?
0181デフォルトの名無しさん
NGNGアルゴリズムの話からAPI設計の話にすりかえて
そのあとAPI設計の話からAPIの話にすりかえた?
0182デフォルトの名無しさん
NGNGアルゴリズムって、STL用語で言うところのアルゴリズムのこと?
0183182
NGNG0184デフォルトの名無しさん
NGNG> 大抵のOSの大抵の言語の大抵の処理系では、
> srand 相当のものに同じ seed を渡すと(あるいは srand 相当のものを使わないと)
> 乱数を使うと毎回同じ数列が返されるようになってます。
この前半部分は「大抵のOSの大抵の言語の大抵の処理系」と言ってるように
特定の言語の特定の規格について言ってるわけではなく
一般的に使われている線形合同な疑似乱数アルゴリズムの特徴について解説してる。
> 乱数を利用するプログラムを作るとき、実行の度に違う値がでてると、
> 単体テストやらアルゴリズムの効率の比較やらプロファイリングに基づいた
> チューニングとかしにくいから。
この後半は一見前半を受けて前半部分の理由を書いてるように見えるがそうではなく
Cの規格に含まれるrand/srandがなぜ線形合同な疑似乱数を採用したかの理由となってる。
話の展開がちぐはぐ過ぎだ。
これじゃ疑似乱数アルゴリズム全般の話題だと解釈する人も出てくるし
Cのrand/srandに特化した話題だと解釈する人も出てくる。
163の話の真中でアルゴリズムの話から規格の話に脈略なくすりかわってるということ。
0185デフォルトの名無しさん
NGNG(2)特定の言語の規格がなぜそのアルゴリズムを採用したかという理由
>>155からアルゴリズムの話になってる最中に
(1)のふりをして(2)を書いたから人によって話題の対象がばらばらになり
アホレスが連鎖したってことかな
0186デフォルトの名無しさん
NGNGモリフォーリズムのこと
0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1071697977/388-
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGまずこのポリホの日本語をなんとかしてくれ
0192デフォルトの名無しさん
NGNG漏れは 163 なんだけど、
>>155 を「なんで適当に seed を毎回変えてくれないの?バグ?仕様?」ってな風に読んじゃったわけ。
seed が同じ擬似乱数なら毎回同じ系列が出てくるのは自明だとおもったんで。
んで、なんで毎回適当に変える仕様になってないか、を説明してしまった。
変わらないことが必要なことはあるし、変えたいなら自分で変えられるし、と。
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGとやかく言う前にsrandの規格書を読め
0195is not a 163
NGNG頭悪いのバレバレ。
0196デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNG後半はなぜ採用されたのか、という説明。
なのに、>>166は後半をアルゴリズムがそうである説明だと誤解したわけだね。
なぜそんなありえない誤解の仕方をしたのかは解からないけど、
酔っ払っていたのかもしれないし、頭のおかしい人が沢山いる環境で生活してるのかもしれない。
あんまり攻めてやるな。
0199デフォルトの名無しさん
NGNG163はアルゴリズムの話ではなくて、発端からAPIの話題のつもりです
0200デフォルトの名無しさん
NGNG擬似RND以外に選択肢が無かったみたいなことを言いたかったんじゃないの?
0201デフォルトの名無しさん
NGNG後半は採用した理由。
だから163は間違ってないということでファイナルアンサー?
0202デフォルトの名無しさん
NGNGそれはみんな理解してる。
話題はすでに>>166が何を意味してるのかに移ってる。
0203デフォルトの名無しさん
NGNGここではどういう意味で使ってるんですか?
みんなばらばらのように見えるんですが
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGよりよく実現されると言えるかな?
0208デフォルトの名無しさん
NGNG複雑になるだけでそれ以外メリットないし。
0209デフォルトの名無しさん
NGNG163を分かりやすく言い直すと次のようなもの
・ほとんどの言語や処理系では乱数に疑似乱数を使っている
・疑似乱数の場合 srand のような seed 設定できる関数に seed を渡すと毎回同じ数列が返る
・さらに srand のような seed 設定できる関数を使わない場合も毎回同じ数列が返る
・なぜそういう結果になるかというと、実行の度に違う値がでてると不便だから
・不便というのがどういうことかというと
単体テスト・アルゴリズムの効率の比較など
プロファイリングに基づいたチューニングとかしにくい
0210デフォルトの名無しさん
NGNG・・・という現象は・・・という人間の要望から発生した?
と書いてあるからこいつが誤読してる。
現象が発生したのではなく、仕様が発生したとみんな言ってるだけなのに。
0211デフォルトの名無しさん
NGNGDipendencyなんたらPrinciple?
0212デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGDIPはせまく読めば古典的なOOデザインだが、Policyなんか
先に生まれたライブラリがあとから提供されるものに依存する、
という点では立派な依存関係の逆転。
0215デフォルトの名無しさん
NGNG短時間に似たようなことを沢山書くのが流行デスカ
0216デフォルトの名無しさん
NGNGそうみたいです。
0217デフォルトの名無しさん
NGNG>先に生まれたライブラリがあとから提供されるものに依存する
>先に生まれたライブラリがあとから提供されるものに依存する
んなことできるかボケ
0218デフォルトの名無しさん
NGNG知ったかぶりに使ってるだけなんだから
許して上げてください
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG後から渡されたパラメータに依存していることになる。
その引数が単なる値じゃなくてポリモっぽいものであれば
アルゴリズムその他は後から提供されたものに委ねるという
パターンがとれる。
じゃあテンプレートパラメータの場合は?
通常(メソッドや関数)の引数としてに何かを受け取る場合
と違い、アルゴリズムだけじゃなく自分自身の構造まで依存
できる。
ポリシーの多重継承で実装されたホスト・クラスなんかはそう。
0221デフォルトの名無しさん
NGNGインターフェイスに依存している
>テンプレートパラメータの場合は
同じ
0222デフォルトの名無しさん
NGNGことによって再利用性を高めるのが目的。
インターフェイス、データ構造、アルゴリズムのうち
どれかは最初に規定しておくが、その他は後から提供
できるようにしたい。
普通のOOの場合はインターフェイスが規定されていて
アルゴリズムは後付けOK。
テンプレートの場合は?同じじゃないよね?
0223デフォルトの名無しさん
NGNG日本語でヨロ
0224デフォルトの名無しさん
NGNGテンプレートは同じインターフェイスのものをまとめるものだから、
インターフェイス重視という点ではすごくDIP。
0225デフォルトの名無しさん
NGNGホストクラスが使う限りのメソッドを、コンパイルが通るシンタックスで
用意しておけばOKとなれば、そこで(ベースとなるインターフェイスとの)
依存関係が切れてウマー
0226デフォルトの名無しさん
NGNG使ったメソッドなどのインターフェイスとの依存を切る事は出来ないよ。
0227デフォルトの名無しさん
NGNG>>222で書いたインターフェイス、データ構造、アルゴリズムなどの
要素について、どれに対する依存を残してどの依存を切るかtemplateを
使うと選択肢が増えると言いたかった。
0228デフォルトの名無しさん
NGNG他にも日本語おかしいが
0229デフォルトの名無しさん
NGNG例えば配列の代わりにvectorを使用してて怒られるといったことは(特殊な環境を除いて)ないだろうと思いますが
ポインタの代わりにshared_ptrを使うというのはあまり推奨されないものなんですかね?
0230デフォルトの名無しさん
NGNG知らないやつが勉強不足。
0231デフォルトの名無しさん
NGNGauto_ptrで済む所をなんでもshared_ptrにするのはどうかと思いますね
0232デフォルトの名無しさん
NGNGどうもありがとうございます。
>知らないやつが勉強不足。
うちの教授(プログラムの専門に非ず)に「標準じゃないけど使って大丈夫なん?」的な
ことを言われたんでちょっと使うのが不安だったんですが、使っても良さそうですね。
>auto_ptrで済む所をなんでもshared_ptrにするのは
そこら辺も注意してやっていきたいと思います。
それにしてもまだあまり参考書が出版されてないみたいですね。
やはりSTLへの採用待ちですか…
0233デフォルトの名無しさん
NGNG教授は単に君の勉強不足を不安視したんでは。
使っても大丈夫かどうか2chで聞くくらいだから。
0234デフォルトの名無しさん
NGNG>>232
STLへの採用ってあるのかな?
BoostはBoostとしていつか標準化されるんだと思ってたけど
0235デフォルトの名無しさん
NGNGSTL(というか、C++標準ライブラリ)への採用は結構マジ話らしい。
聞きかじりだけど、boost::iteratorsあたりで使われているイテレータの分類なんかは
もう次期C++への採用は内定だそうで。
0236デフォルトの名無しさん
NGNG次期C++標準に含まれることが決定しているそうな
0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGboostはSTLと同じくらい標準だよ。
それぐらいSTLは使われてない。
実装がひとつしかない分、boostのほうがまともかもしれない。
0240デフォルトの名無しさん
NGNG>boostはSTLと同じくらい標準だよ。
>それぐらいSTLは使われてない。
意味不明すぎ。STLは標準でboostは標準じゃない。
0241デフォルトの名無しさん
NGNG>それぐらいSTLは使われてない。
分かりやすく
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG「結構マジ話らしい」言われちゅゃおうところが情けな
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGこれは的を射てますね
つ〜かboostの中の人はSTLに依存しないコードを書いちゃってくれたらいいのに
と思いますよ
sgiと組み合わせるとボロボロ
結局preprocessorしか使えない
lexical_castすら使えないのには泣けました
0248デフォルトの名無しさん
NGNG0249247
NGNGとあるハードウェア用のAPIを使って書かないといけないんです
でそのSDKが既にsgi使ってるんですよ
#includeが<list>だったり<list.h>だったりして
そのライブラリのソースコードは提供されていません
SDKにはAPIのヘッダ達とユーザ側でリンクするオブジェクトファイル(.lib)と
sgistlのヘッダが含まれているんです
例えばVC++付属のstl使おうとするとコンパイルとおらないんですが
こういう状況でstlport使えるんでしょうか?
ていうか試して使えなかった記憶があるんだけどもし使える方法があるならかなり嬉しい
0250デフォルトの名無しさん
NGNGバイナリ提供部分とのインターフェースがsgistlに依存していれば無理。
そうでなければ、どうにかして置き換えられるはず。
もちろん、「どうにかして」の部分は実際に
その環境を持っているあんたにしかわかんないよ。
0251あんた
NGNG>バイナリ提供部分とのインターフェースがsgistlに依存していれば無理。
これってどうやったらわかるんですか?
というライブラリがsgiとスタティックリンクされてたら無理
っていう理解でよいでしょうか?
0252デフォルトの名無しさん
NGNGそのSDKはSGIのSTLのままでいいの?
stlportの名前空間を変えてリンクすれば?
0253あんた
NGNG別にSDKがSGI使ってるのはかまわないです
>stlportの名前空間を変えてリンクすれば?
namespace stlport{
#include <stlport/list>
}
using namespace stlport::std;
とかで,stlportにもリンクすればいけますかね
これは試してない
いけたらすご〜く嬉しい
0254あんた
NGNG↑の場合例えばboost側でstl使ってるところで
「sgiとstlportどっち使えばいいんだよ〜」って言われちゃいません?
SDKのヘッダインクルードする前にboostインクルードすればいいのかな
むぅまぁ明日試してみます
0255デフォルトの名無しさん
NGNGふつうにSTLport使おうとするとどうなるのかを言ってもらわないと、お話にならないね。
0256デフォルトの名無しさん
NGNGの3番目にある状態の操作というところがわかりません。最初にある、
「基底クラスを用いて実装される様々な動作は、同じ状態を操作しなければ
なりません」のとこからいきなり意味不明。
0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNGまあ、まあ
>256
状態とは、大雑把に言うとデータのことだよ。
まずは多重継承、仮想継承から始めなされ
ググッてみたら、ここがよさげだった。
ttp://www.uri.sakura.ne.jp/~cosmic/yuno/lab/cpp_virtualbase.html
ttp://www.tietew.jp/cppll/archive/1167
0259デフォルトの名無しさん
NGNGSTLportはオプションで_STDかなんかそんな名前空間に切り替え
られるはず。
で、それでboostコンパイルが…できるかどうかは、今C++の環境が
すぐに出せないから答えられん。。。boostオプション見てみて。
0260256
NGNG多重継承や仮想継承については大体知ってるんだけど、あの内容と
どうつながるのかわからないっす
飲みすぎでレス遅くなりスマソ
>>257 わーてるよ\(`Д´)ノ
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGますよね?必ずそうしなければいけない訳ではないので仮想継承うんぬんはあまり
気にしなくていいのではないかと。
むしろ『ユーザ・クラスはライブラリ・クラスを継承するものの、その逆は許されない』
という注意点と、前のページの下のほうにある『設計とは、制約を課す作業のことです』
以下の文章をよく読み比べてみて下さい。
0266デフォルトの名無しさん
NGNGあぁ、stlportさんをまだ君を大事にしてくださる方々がいるのですね。
僕は、今でもあの時、君と出会った感動を忘れないよ。
今では、僕が君とは交じり合うことは無くなってしまったけど。
どうか、stlportさんとお付き合いを重ねている方々・・・。・
末永く僕の分まで一緒にいてあげてください。
0267デフォルトの名無しさん
NGNGl___ l' / / __,, ヽ'~~} _l ,l__
__,¬ / >_ / ∠. || ll l. l .゙ ___}
ー-l ,==| |==,゙〆 ノノ .==. || || l 「 ゙゙゙゙| ,i _
,l l!==| |==,!\ ゙~! | ̄ || || l l ,,,. / l゙ ←丶
,,l゙, l.==| |==,,ヽ ゝ / ヽ .|| || .l l,、 ,,,,,/゙ l / l゙ 、
:l-゙゙ ,,,, l゜l / lヽノ ll, ,|| ゙l,, ゙゙゙゙゙゙ .l゙ ノ. ,l゜ ゙l――ヽ,
.゙゙--゙ ~ ゙゙゙° ゙゙゙゙゙゙゙゙゙゙″ ゙゙゙゜ ゙゚゙゙゙゙゙゙゙゛
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGseed だけ /dev/random から持ってくれば良いじゃん。
0270デフォルトの名無しさん
NGNGそんなことするならいっそurandomで
0271デフォルトの名無しさん
NGNG作らない。
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/qid=1096270912/sr=1-1/ref=sr_1_18_1/249-7749404-9276354
この本読めばわかる。読まなくてもいいけど。
要するに自分がこのクラスとこのクラス(あるいは関数)は深く関連があるなと思えば一緒のヘッダで宣言するだけの話。
0272271
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1094494997/
ここに貼るつもりがここでやっちゃった。
0273デフォルトの名無しさん
NGNGSTLport 4.6.2(iostreamビルド済み) + boost 1.31.0の組み合わせで
bjam -sTOOLS=msvc-stlport "-sBUILD=debug release <runtime-link>static/dynamic" stage
でビルドし、<boost/filesystem/path.hpp>を使うと、リンク時に
libboost-filesystem-vc6-mt-sgdp-1_31.libが無いと怒られます。
boost/config/auto_link.hppを見ると_STLP_OWN_IOSTREAMS指定時は-sgdpが
付くのが正しいようですが、普通にbjamでビルドするとどうしても-sgdpタイプのライブラリが
生成されません。bjamのオプションで何か足りないのでしょうか?
"Getting Started"を見てもそれらしい指定が見あたらないのですが。
STLportを使わなければリンクできるのですが、将来VC7移行時にstlのバージョン間の
違いに悩まされたくないので、できれば使いたいのです。
環境はXP Pro(SP1) + VC6(SP5)です。どなたか教えて下さい。
0274デフォルトの名無しさん
NGNG俺も今stage/lib見たらmt-sgdpがなかった。
ちょいと調べてみるけど、VC6の環境ないんで判るか微妙。
今回の問題には多分関係ないけど、
VC6+STLportならbjamのスイッチstlport-iostreamをonに設定しないとだめ。
あと、STLPORT_PATH周りの設定もきちんとしているか確認。
tools/build/v1/msvc-stlport-tools.html のオプションをしっかり確認する事。
あと、そのあたりの問題について参考になるか分からないけど、
cppllで最近出たVC6でのboostのビルドについての話題。
ttp://www.tietew.jp/cppll_novice/archive/472
0275274
NGNG>bjam -sTOOLS=vc7.1-stlport "-sBUILD=<native-wchar_t>on <runtime-link>static/dynamic <threading>multi" stage
vc6+stlportで実際にビルドするなら、こんな感じかな?
試してないから保証はできないけど。
>"c:\program files\microsoft visual studio\vc98\bin\vcvars32.bat"
>set STLPORT_PATH=(STLPortのルートフォルダの一つ上へのパス)
>set STLPORT_VERSION=(STLPortのバージョン)
>bjam -sTOOLS=msvc-stlport "-sBUILD=debug/release <stlport-iostream>on <runtime-link>static/dynamic <threading>single/multi" stage
0277273
NGNGSTLPORT_PATH, STLPORT_4.6.2_PATH, STLPORT_VERSIONを
定義して
bjam -sTOOLS=msvc-stlport "-sBUILD=release debug <threading>single/multi
<runtime-link>static/dynamic <stlport-iostream>on <native-wchar_t>on" stage
でビルドしてみたら、期待通りmt-sgdpができました。
が、Let's Boostの
http://www.kmonos.net/alang/boost/classes/filesystem.html
を適当なプロジェクトのcppに入れてビルドすると
fs.obj : error LNK2001: 外部シンボル ""public: class _STL::basic_string<char,class
_STL::char_traits<char>,class _STL::allocator<char> > __thiscall boost::filesystem::path::
leaf(void)const " (?leaf@path@filesystem@boost@@QBE?AV?$basic_string@DV?
$char_traits@D@_STL@@V?$allocator@D@2@@_STL@@XZ)" は未解決です
Debug/fs.exe : fatal error LNK1120: 外部参照 1 が未解決です。
とエラーが出ます。もう何が何やら…
もう数日試してみて、駄目なら諦めます。成功したら書き込みますので、
消えたら駄目だったと思ってください。
0278274
NGNG多分、STLPORT_*の設定がうまく行っていないせいだと思う。
そのせいで、STLportを使わずにVC6のSTLを使っちゃってるんじゃないかな。
生成されたDLLファイルを覗いてみて、エクスポート関数の返り値や引数の型に
std::ってついていたら確実にそのミスなんだけど、確認の方法を知っていたら確認してみてくり。
具体的に、環境変数STLPORT_*を何に定義したのか晒してほしい。
>274 のcppllの記事の中で出てたこのURL読んだ?
ttp://hw001.gate01.com/eggplant/tcf/cpp/boost_build.html
0279273
NGNG記事は読んでいました。
Dependency Walker(あるいはdumbpin /import)で覗くとMSCVP60D.DLLに依存してました。
STLPORT_4.6.2_PATHがC:\cpp\lib\STLport-4.6.2\stlportになっていたのを修正して、
STLPORT_4.6.2_PATH=C:\cpp\lib\STLport-4.6.2
STLPORT_PATH=c:\cpp\lib
STLPORT_VERSION=4.6.2
で再度ビルドしてみましたが、こんどは
C:\cpp\lib\STLport-4.6.2\stlport\cstdio(117) : error C2039: 'vsnprintf' : '`glob
al namespace'' のメンバではありません。
C:\cpp\lib\STLport-4.6.2\stlport\cstdio(117) : error C2873: 'vsnprintf' : シンボル
を using 宣言の中で使用することはできません。
C:\cpp\lib\boost_1_31_0\boost/detail/allocator.hpp(277) : fatal error C1506: ブロ
ックが大きすぎて、コンパイルできません。
とエラーが出るようになりました。
とりあえず、午前中はこんな感じです。
0280デフォルトの名無しさん
NGNG>ただこれで bjam を実行するとコンパイルエラーが出てしまい、
>STLport の cstdio の 117行目を
>using _STLP_VENDOR_CSTD::vsnprintf;
>から
>using _STLP_VENDOR_CSTD::_vsnprintf;
>に修正することでエラーが出なくなりました。
とある。試してみたら?
0281デフォルトの名無しさん
NGNG定義しないとboost::smatch::captures使えなかったのかよ...orz
できれば名前付きキャプチャもサポートしてホスィ
0282273
NGNG全部読んでいたはずなのに、いざとなると頭からすっぽり抜けていました。
まとめると
1.stlport/stl_user_config.hには手を付けない(_STLP_NO_OWN_IOSTREAMSはコメントアウトしたまま)
stlport/cstdio の117行目を「using _STLP_VENDOR_CSTD::_vsnprintf;」に修正(アンダースコア追加)
2.nmake -f vc6.mak clean all; nmake -f vc6.mak installでSTLport 4.6.2をビルド&インストール
3.VCVARS32.batのset INCLUDEとset LIBにSTLportを追加。
あと、環境変数か上記バッチに
set STLPORT_4.6.2_PATH=C:\cpp\lib\STLport-4.6.2 (インストール先)
set STLPORT_PATH=c:\cpp\lib (インストール先の1つ上)
set STLPORT_VERSION=4.6.2 (バージョン文字列)
も追加する。必要に応じてVC++6のディレクトリ設定も追加。
4.bjamでビルド。
C:\cpp\lib\boost_1_31_0>bjam -sTOOLS=msvc-stlport "-sBUILD=release debug
<threading>single/multi <runtime-link>static/dynamic <stlport-iostream>on
<native-wchar_t>on" stage
スレッドやランタイム、ワイド文字サポートは不要なら削除。
参考サイト
ttp://www.tietew.jp/cppll_novice/archive/472
ttp://hw001.gate01.com/eggplant/tcf/cpp/boost_build.html
ttp://ciel.hio.jp/translation/STLport/INSTALL.ja.html
>>274様、>>280様、ありがとうございました。
0283281
NGNG#define BOOST_REGEX_MATCH_EXTRA
#include<boost/regex.hpp>
void print_recursive_captures(const std::string& regx, string next)
{
boost::regex e(regx);boost::smatch match;
while(boost::regex_search(next, match, e, boost::match_extra))
{
for(unsigned int i = 0; i < match.size(); ++i)
std::cout << " $" << i << " = \"" << match[i] << "\"\n";
for(unsigned int i = 0; i < match.size(); ++i){
std::cout << " $" << i << " = {";
for(unsigned int j = 0; j < match.captures(i).size(); ++j){
std::cout << "\"" << match.captures(i)[j] << "\"";
( j+1 < match.captures(i).size()) ? (std::cout <<",") : (std::cout << "");
}
std::cout << " }\n";
}
next = match.suffix();
std::cout << "next=" << next << std::endl;
}
}
int main(){
print_recursive_captures("([A-Z_]+?)\\(([^,\\)]+?)(?:,([^,\\)]+?))*?\\)",
"__ABC__(CPP,CS)11111111111111111__CDE__(cpp,cs)22222222222222222");
}
0284283の修正
NGNG#include<iostream> //追加
結果:
$0 = "__ABC__(CPP,CS)"
$1 = "__ABC__"
$2 = "CPP"
$3 = "CS"
$0 = {"__ABC__(CPP,CS)" }
$1 = {"__ABC__" }
$2 = {"CPP" }
$3 = {"CS" }
next=11111111111111111__CDE__(cpp,cs)22222222222222222
$0 = "__CDE__(cpp,cs)"
$1 = "__CDE__"
$2 = "cpp"
$3 = "cs"
$0 = {"__CDE__(cpp,cs)","111111111111111" }
$1 = {"__CDE__","1111111" }
$2 = {"cpp","111" }
$3 = {"cs","11" }
next=22222222222222222
0285デフォルトの名無しさん
NGNGみたいな二次元配列があって、これをstd::sort()アルゴリズムに渡すには
どうしたらいいのでしょうか?
std::sort(str, str + 4, std::strcmp); とやってもエラーが出ます。
C:/STLport-4.6.2/stlport/stl/_algo.c:750: error: ISO C++ forbids assignment of arrays
C:/STLport-4.6.2/stlport/stl/_algo.c:754: error: incompatible types in assignment of `char*' to `char[10]'
というよな感じで。本当はもっとずらずらとエラーが出るのですが、STLのエラーは
そのまま貼っても無駄に長いだけですよね。
環境はgcc3.4.2(MinGW) + STLPort 4.6.2です。
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGレスありがとうございます。やってみましたがダメみたいです・・・・
同じようなエラーが出ました。
0288デフォルトの名無しさん
NGNGそれだと、ソートアルゴリズム中で
// x, y 番目を入れ替え
tmp = str[x];
str[x] = str[y];
str[y] = tmp;
なんつーコードに展開されるからダメでしょ。
char const* str[] = { "abc", "def", "ghi", "jkl" };
とか std::string の配列にすれば OK だと思うが、どうよ?
0289デフォルトの名無しさん
NGNGやっぱりそうなんですか。std::sortには比較関数しか渡せませんからねえ・・・・
std::sortに交換関数も渡せればいいのですが。
でも、教えて頂いたように書き換えてうまく行きました。ありがとうございました。
0290デフォルトの名無しさん
NGNG上はようわからんが、下のはソート対象のiteratorの参照先がchar[10]
に対してstrcmpに渡す値がchar*なので型変換できないのではないかと。
あと比較ファンクタはstd::less相当のものでないとソートできないと思い
入力変数 std::less strcmp
a,b true true
a,a false false
b,a false true
>>288
配列コピーはサポートされているのでは?
なんか久しぶりにSTL見たのでうまく表現できん。。。
0291デフォルトの名無しさん
NGNGあーそっか。std::strcmpではまずいですね。どおりで結果が変だと
思いました。そしたら叙述関数か関数オブジェクトを外部に作ります。
配列のコピーはどうやったらできるんでしょうか?std::sortには渡せ
ないんですが・・・風呂入って来ます。
0292デフォルトの名無しさん
NGNG一年近くSTLさわってないんではずしてたらすまんが
コピー可能なイテレータ作ればいいんじゃねぇの?
配列のコピーがサポートされてたかどうかは忘れたけど、
それくらいテンプレート関数使えば簡単に出来るんだからサポートしろって感じだけどな。
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGイテレータの自作ですか。代入演算子やコピーコンストラクタを配列に対して
定義するしかないんですね。ちと残念ですがまだそこまで私の実力が伴わない
ので諦めます・・・・
しかし qsort() に出来て std::sort() だと簡単にはできないというのが悔しい・・・
0295デフォルトの名無しさん
NGNG#include <iostream>
#include <algorithm>
#include <iterator>
template< typename T, size_t size > class array_iterator_t
{
public:
array_iterator_t( T (*ptr)[size] ) : m_ptr( ptr ){}
array_iterator_t( array_iterator_t const& src ) : m_ptr( src.m_ptr ){}
array_iterator_t & operator =( array_iterator_t const& src ){ m_ptr = src.m_ptr; return *this; }
array_iterator_t & operator ++(){ ++m_ptr; return *this; }
array_iterator_t operator ++(int){ return array_iterator_t( m_ptr++ ); }
array_iterator_t & operator --(){ --m_ptr; return *this; }
array_iterator_t operator --(int){ return array_iterator_t( m_ptr-- ); }
array_iterator_t & operator +=(ptrdiff_t d){ m_ptr += d; return *this; }
array_iterator_t & operator -=(ptrdiff_t d){ m_ptr -= d; return *this;}
array_iterator_t operator + (ptrdiff_t d) const{ return array_iterator_t( m_ptr + d ); }
array_iterator_t operator - (ptrdiff_t d) const{ return array_iterator_t( m_ptr - d ); }
ptrdiff_t operator - (array_iterator_t const& base) const{ return m_ptr - base.m_ptr; }
bool operator==( array_iterator_t const& rhs ){ return m_ptr==rhs.m_ptr; }
bool operator!=( array_iterator_t const& rhs ){ return m_ptr!=rhs.m_ptr; }
bool operator<=( array_iterator_t const& rhs ){ return m_ptr<=rhs.m_ptr; }
bool operator<( array_iterator_t const& rhs ){ return m_ptr<rhs.m_ptr; }
bool operator>=( array_iterator_t const& rhs ){ return m_ptr>=rhs.m_ptr; }
bool operator>( array_iterator_t const& rhs ){ return m_ptr>rhs.m_ptr; }
0296デフォルトの名無しさん
NGNGstruct array {
T value[size];
operator T*(){ return value; }
};
array& operator*(){ return *reinterpret_cast< array* >( m_ptr ); }
typedef std::random_access_iterator_tag iterator_category;
typedef array value_type;
typedef ptrdiff_t difference_type;
typedef array* pointer;
typedef array& reference;
private:
T (*m_ptr)[size];
};
template< typename T, size_t size > array_iterator_t< T, size > array_iterator( T (*ptr)[size] ){ return array_iterator_t< T, size >( ptr ); }
bool string_less( char const* a, char const*b ){ return strcmp( a, b )<0;}
int main(int argc, char* argv[])
{
char str[][10] = {"ghi", "def","abc", "jkl"};
std::sort( array_iterator( str ), array_iterator( str+4 ), string_less );
std::copy( str, str+4, std::ostream_iterator< char const* >( std::cout, " " ) );
return 0;
}
0297デフォルトの名無しさん
NGNGこれでいける
struct Array{
char c[10];
friend bool operator<(const Array &a,const Array &b){
return strcmp(a.c,b.c)<0;
}
};
std::sort((Array*)str, (Array*)(str+4));
0299デフォルトの名無しさん
NGNGsortに突っ込むこと自体間違っている,ということで良いですか?
>>297
(゚д゚)ウマーなんですが,reinterpret_castはなるべくなら最終手段にしたいですね.
というか,そうするなら初めから固定長文字列ラッパ使えば良いような・・・.
boostでようやくfixed_stringがレビュースケジュールに入ったので
将来的にはそれを使えばさらに(゚д゚)ウマーになるんでしょうかね.
0300デフォルトの名無しさん
NGNGreinterpret_castは避けたいという気持ちはわかるが、だとしたらqsort() に出来て
std::sort() にできないことを悔しがる必要はないんじゃないか?
0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG仕事おそいし
構文きもいし
0303デフォルトの名無しさん
NGNGますます閑散としてしまうような
むしろこことC++相談室の統合を考えたほうがいいような気がする
0304デフォルトの名無しさん
NGNG/\
/ ノ \,_;;,;;vv、;、
/ノ ,;; ;:;#ヽ や、やめてぃょぅ
i' "~'"" ヽ ここの客、盗らないで。
l ○ ○ i;
;; * υ u l
ヽ、 ゚ (_人__丿 ノ
/ `ヽ、__ ,ノー'"/;~;,ヽ
/  ̄"""゙ (;;,@';,)
ノ ヾ.,;,.∴ (´"~"" ∵
l ';,;@;';, ノ ;,.
| ;' ";~" / ;,.
0305デフォルトの名無しさん
NGNG勝手にSTLスレ作ってる奴いるけど。
0306デフォルトの名無しさん
NGNGここで積極的にboostの話題振れば良いと思いますよ.
というか,仮にSTLスレの存在を認めるとすると
このスレにはtemplateの文法とBoostぐらいしか話題が残されていない・・・.
0307デフォルトの名無しさん
NGNG0308デフォルトの名無しさん
NGNGせっかくのそれを破壊するのはどうかと思う。
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNG含めてもええよな?な?
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNGそれはプリプロセッサスレへ。
0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNGでも、ちょっと待ったー。何じゃのこのサイズ、何じゃこの遅さ。
とはあまり気にしないのですが、でも確実にそれらと比べるとDelphiの方が優れているように感じてしまう。今日この頃。
だからと言って、やめられない。
このboostを使うと今まで書き続けていたC++のコードが気色悪いほどまったく別のものになる感じが。気持ちぃいいいいい!!
0317デフォルトの名無しさん
NGNGコピペの元ネタ何?
0318283の原因
NGNGboost::smatchを再利用したときに前の状態が
残ってる場合に284のような結果になるみたい。
だから
match.swap(boost::smatch());
をwhile文の最後に追加したら
ちゃんと動きました。
0319デフォルトの名無しさん
NGNGでも、ちょっと待ったー。何じゃのこの厨房、何じゃこの痛さ。
とはあまり気にしないのですが、でも確実にそれらと比べるとマ板の方が優れているように感じてしまう。今日この頃。
だからと言って、やめられない。
このム板を使うと今まで書き続けていた煽りのレベルが気色悪いほどまったく別のものになる感じが。気持ちぃいいいいい!!
0320デフォルトの名無しさん
NGNG最近知ってこれいいやとちょこちょこ使っているのだけど、
ぐぐったら論外に遅いとかいう意見がひょこひょこ出てくるもので。
じぶんでつかっちえるぶんにはきにならないのでつかうけどsぁええ。
0321デフォルトの名無しさん
NGNG実際にトレースして原理を調べてみれば良いと思う。
いつのタイミングでどんな処理をするのかとか。メモリをいつ、どれくらい使うかとか。
それで納得できれば使えばいいし、そうでなければ別なものを使えばいい。
参照については中に生のポインタを持っているのだから、普通のポインタと
多くの場合速度的には変わらないんじゃないだろうか。
0322デフォルトの名無しさん
NGNGさすがに生ポインタと比較すると遅くなる要素は大量にあります.
ただ,shared_ptrのオーバーヘッドは局所的なものなので,
(例えば参照はずしは321さんのおっしゃるとおり生ポインタと変わらないはず)
どこに余分なコストがかかるかを理解していればそれほど気にする必要はないかと.
また,このオーバーヘッドはnon-intrusiveな共有ポインタの実装としては
ほぼ不可避なものばかりですし.
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNGinline展開無しとかじゃねーかと
0325デフォルトの名無しさん
NGNG今ソース読んでみましたけれどそんなオーバーヘッドがかかる要素は
どこにも見当たりませんでしたよ?324さんの言うとおりとか・・・
0326デフォルトの名無しさん
NGNGあと設定によってはassertが入るのかな。
0327デフォルトの名無しさん
NGNG別々の参照カウンタを参照するようになって狂うんだよな。
普段は気をつけてりゃ良いけど this だけはどうしようもないから困る。
被参照オブジェクト内に参照カウンタを持たせるとか、
new に細工して頭に参照カウンタを埋め込むとか、
被参照オブジェクトに多少制限を加えることで解決出来る方法はあると思うけど、
そういう実装は無いの?
0328デフォルトの名無しさん
NGNGboost::intrusive_ptr
0329デフォルトの名無しさん
NGNG0331290
NGNG>>290のstrcmpの戻り値以外の話は全て忘れてくれ。。。
なんか全然間違ったこと書きまくっていたことに気づいた。。。
orz
配列コピーなんて全然サポートされてないし、引数も問題なく渡せるはずだし。。。
そもそも半年以上まともにC/C++いじってないどころかネットもまとも
につなげられない場所なんで。。。
半年でここまでアホになれるんだと痛感してしまった。。。
やっぱり継続は力なりだな。
もうオレって( ´,_ゝ`) プッ♥
0332デフォルトの名無しさん
NGNGtemplate <typename T>
class c
{
template <typename U> struct s{ typedef U type; };
template <typename U> struct s<U[?]>{ typedef U type; };
public:
typedef typename s<T>::type type;
};
template <typename T>
inline int
numof( const T& t ){
return sizeof( t ) / sizeof( t[ 0 ] );
}
template <typename T>
typename c<T>::type min_array( const T& t ){
return *std::min_element( t, t + numof( t ) );
}
int main(){
int n[] = { 1, 2, 3, 4, 5 };
std::cout << min_array( n ) << std::endl;
return 0;
}
頑張ってここまで考えたんですが、?にmain::nの要素数をコンパイルタイムで入れられなくて行き詰まっています…
0333デフォルトの名無しさん
NGNGtemplate <typename T, unsigned N>
T min_element(T (&ary)[N]) {
return std::min_element(&ary[0], &ary[N]);
}
0334デフォルトの名無しさん
NGNG- return std::min_element(&ary[0], &ary[N]);
+ return *std::min_element(&ary[0], &ary[N]);
0335デフォルトの名無しさん
NGNG感動しました!
ありがとうございました!!
0336デフォルトの名無しさん
NGNGコレとlibsigc++の両方使い比べた人の感想とか聞きたい気がしたようななゆゆゆ
0337デフォルトの名無しさん
NGNGポインタを処理する出来るだけシンプルなクラスを作りたいんですが、
以下のようにまでは考えられたんですが、デストラクタでの
f の呼び出し方がわかりません。どうすればよいでしょうか…?
template <typename T>
class smart_ptr{
public:
template <typename U, typename F> smart_ptr( U* ptr, F f ) : p( ptr ){}
~smart_ptr() throw(){}
private:
T* p;
};
void f( int* p ){
delete p;
}
int main(){
smart_ptr<int> s( new int, f );
return 0;
}
0338デフォルトの名無しさん
NGNGtemplate <typename T>
class smart_ptr
{
public:
typedef void F(T*);
template <typename U> smart_ptr(U* p, F f) : p_(p), func_(f){}
~smart_ptr(){func_(p_);}
private:
T* p_;
F* func_;
};
void f(int* p)
{
delete p;
}
int main(){
smart_ptr<int> s(new int, f);
return 0;
}
0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNGファンクタも呼び出せるようにしたいならもう一押し要ると思いますが.
template <typename T>
class smart_ptr
{
public:
template <typename U, typename F>
smart_ptr(U* p, F f) : p_(p), func_(f){}
~smart_ptr(){func_(p_);}
private:
T* p_;
boost::function<void (T*)> func_;
};
とか.
0341デフォルトの名無しさん
NGNGstream系で何かありそうなんですが、よく分かりません。
0342デフォルトの名無しさん
NGNGstd::vector< unsigned char > じゃ不満なの?
0343デフォルトの名無しさん
NGNG"簡単"の定義による
0344341
NGNG0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNG{
v.push_back(c);
return v;
}
0347341
NGNGunsigned charじゃなくて、unsigned charの配列を追加するには
どうしたらいいんでしょうか。
要素の長さだけforで繰り返すんですか?
0348デフォルトの名無しさん
NGNGどうしても<<がいいのか?
STLには
std::copy( a, a+n, std::back_inserter( c ) );
という決まり文句があるんだが。
0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG0351!=348
NGNG0352デフォルトの名無しさん
NGNGってことじゃね?
0353デフォルトの名無しさん
NGNGそういうのならstringstreamはどう?
0354353
NGNG0355デフォルトの名無しさん
NGNGttp://www.gotw.ca/publications/mill17.htm
を読んでおどろいた。
template<class T> void f( T ) {}
template<class T> void f( T* ) {}
template<> void f<>(int*) {}
と書くのと
template<class T> void f( T ) {}
template<> void f<>(int*) {}
template<class T> void f( T* ) {}
と書くのじゃ順番が違うだけなのに
f((int*)0);
の結果が変わるなんてまったく知らなかったーよ
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG順番が違ったら大違いだと思うが。
0358デフォルトの名無しさん
NGNGback_inserter は push_back だよー
0359デフォルトの名無しさん
NGNG0360デフォルトの名無しさん
NGNGinsertでいいだろ。
0361デフォルトの名無しさん
NGNG0362デフォルトの名無しさん
NGNGこれVC6だとC2667, C2668が出る(´・ω・`)
どう違うんですか?
0363デフォルトの名無しさん
NGNGリンク先読めよ。
0364デフォルトの名無しさん
NGNGスマンカッタ
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNGこちらVC6。本部応答願います。
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG0374デフォルトの名無しさん
NGNGpointer->ただのポインタ
0375373
NGNG使う上で注意するべきことというか、
ポインタの代わりとしてイテレータが使えない場合があるのかどうか
聞きたかったんです。
0376デフォルトの名無しさん
NGNGもう少し具体的に。
0377デフォルトの名無しさん
NGNGイテレータはイテレートできてポインタとしても扱えるもの。
例えば、vectorならポインタもイテレータも同じだけど、
listだとポインタでイテレートできない。
こんな説明でいい?
0378デフォルトの名無しさん
NGNGリストでも大抵list->next等でイテレートできるだろ
もろポインタ。
つーか辿る手段がないものをリストとは言わない
例えるなら集合とかにしとけ
0379デフォルトの名無しさん
NGNG話がかみ合ってないぞ。
ここはC++のtemplateスレだから377が言ってるのは、list.begin()で取れるイテレータのことだと考えた方がいい。
vectorの場合 vec.begin() じゃ無くて &vec[0] でも列挙できるが
listの場合 &list[0] はダメと言いたかったんだろう。
0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNGポインターと別物として考えてください。
イテレータの代わりにポインターは使えるけど
ポインターの代わりにはイテレータは使えない。
0382デフォルトの名無しさん
NGNGってこった
0383デフォルトの名無しさん
NGNG例えば、STLコンテナのイテレータとしてクラスが使われている
場合は「--container.end()」は何も問題ないが、生のポインタが
使われている場合は「--container.end()」はエラーになる。
0384デフォルトの名無しさん
NGNGポインタのインターフェイスで、
STLのコンテナ間の実装の差異を埋めるためのものでしょ。
じゃあ、全部ランダムアクセスにしろと。
0385デフォルトの名無しさん
NGNG歴史的な順番としてはそうかもしれないが、言語を作った側の
意図としては順番が逆なのでは?つまり、ポインタがランダム
アクセスイテレータの一形態に過ぎないという。
0386デフォルトの名無しさん
NGNGイテレータ⊊ポインター
でしょ。
0387デフォルトの名無しさん
NGNG逆
0388デフォルトの名無しさん
NGNGイテレータ=サーバント
0390デフォルトの名無しさん
NGNGイテレータ>=ポインター
0391デフォルトの名無しさん
NGNGランダムアクセスイテレータじゃないとポインタで代わりにならないよ。
0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNGとは限らない。
0394デフォルトの名無しさん
NGNG実装によってはイテレータがポインタを保持しない場合ってのがあるの?
0395デフォルトの名無しさん
NGNG列挙対象がシステムで唯一なら何も持つ必要は無いし、
配列で管理されていればそのインデックスを持つだけでも良い。
0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNGSTLの話じゃないの?
0398デフォルトの名無しさん
NGNGSTLのイテレータの話(らしい)けど、STLのコンテナのイテレータの話じゃない。
0399デフォルトの名無しさん
NGNGなるほど。
0400デフォルトの名無しさん
NGNG参照演算子はどうするの?
0401デフォルトの名無しさん
NGNGゼロレジスタみたいに、常に参照はがしするとゼロを返すイテレータとかも
ありだしね。理論的には。
0402386
NGNGで考えると
RandomAccessIterator<T> : private T*{・・・};
OteraIterator : private T*{・・・} となるけど
T* : private RandomAccessIterator<T>, private OtherIterator<T>{・・・}の方がしっくりこない。
0403デフォルトの名無しさん
NGNGコンセプト同士の関係 (refinement) は、継承じゃ記述できんぞ。言いたいことは
分かるが。
0404デフォルトの名無しさん
NGNG人が多くて,どうにも議論が追いにくい・・・.
>403
コンセプトをインターフェースクラスとして表現した上で,
Refinementの関係をインターフェースクラス間の継承関係で表現できないですかね?
(昔この手の提案があったはず)
あとコンセプトのRefinementの関係を,コンセプトに1対1対応させたタグの
継承関係で表現する手法はありますよね.(iterator_categoryとか)
0405デフォルトの名無しさん
NGNG> Refinementの関係をインターフェースクラス間の継承関係で表現できないですかね?
C++ だと operator は継承できないし、できたとしても Assignable とかはクラス
としては記述しようがないかと。operator=() が定義されてることと Assignable で
あることは違うし (std::auto_ptr とかさ)。
0406デフォルトの名無しさん
NGNG確かに,よくよく考えてみれば他にも例えばoperator+等は
メンバかグローバルか両方の可能性がありますしね.
有効式(Valid Expression)の要求が抽象的(構文が通るかどうか)過ぎて
インターフェースクラスで表現するには限界がありますね.失礼しました.
0407406
NGNG+有効式(Valid Expression)のようなsyntaxの要求ですら
ましてやsemanticな要求は・・・ですね.
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNG君、ドイツの子?
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGてどういう意味?
0413デフォルトの名無しさん
NGNGそのままだが。C++ の言語仕様。
0414デフォルトの名無しさん
NGNG・All overloaded operators except assignment (operator=) are inherited by derived classes.
0415デフォルトの名無しさん
NGNG多いから、継承も何もないわな。
0416デフォルトの名無しさん
NGNGそれとフリー関数で提供した場合は継承は関係ないが
"要求"は保存される
(コンセプトとは要求の集合である、という文脈で)
0417デフォルトの名無しさん
NGNG厨を晒してる場合じゃないぞ
0419boost/mpl/apply.hppを眺めて。
NGNG# include "boost/mpl/aux_/include_preprocessed.hpp"
この2行がすべてを無意味にする恐ろしいヘッダファイルであった。
因み環境vc7.1。
0420デフォルトの名無しさん
NGNG0421確かにこれは恐ろしいw
NGNG無意味になったのは「マクロの嵐を必死こいて解読した努力」ですか?w
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG俺は洟から解読をあきらめた
0424419
NGNGあはは。それが8割ほどですかね。
このヘッダファイルはなんか罠のある迷路みたいで疲れた。orz
以下無知な俺が得た成果なんだけどはっきり言ってバカです。・・・・・・・。
マクロ切り替えを解読するのがめんどくさかったから
AUX_APPLY_N_PARTIAL_SPEC_PARAMSなどのテンプレで使われてるものから解読していって
いざコンパイルして型をみてみたら 「あれ?予想と違う型になってもおた」 てな具合になってあわてました。
で、なくなくマクロ切り替えも見てみたら>>419で書いた部分が
#define BOOST_MPL_NO_PREPROCESSED_HEADERS
これを定義してないとそのままマクロ展開されてboost/mpl/aux_/preprocessed/適切なディレクトリ/apply.hppこれをインクルードして
mpl/apply.hppヘッダの役目を終えてしまう仕組みになってたんでね。
0425デフォルトの名無しさん
NGNG>>424
ここはお前の日記帳じゃねーんだ。
広告の裏にでも書いてろ。
な。
0426デフォルトの名無しさん
NGNG>424
PP多用したboostのコード読むときは使っているコンパイラに
PPの結果だけ吐かせてそれを整形して読んだ方が速いですよ.
0427424
NGNGわざわざ助言ありがとう。
でも、実はすでにブリプロセスファイルを生成して確認をしてるんですよね。申し訳ない。
>>425
アイアイサー。
しかし、また書く時あるかも・・・・・あしからず。
0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG出会いが少ないから
0434デフォルトの名無しさん
NGNGとは別の方法としての
std::string str;
str.reserve(6);
strcpy(&str[0], "aiueo");
は問題ない使い方でしょうか?
0435デフォルトの名無しさん
NGNG>&str[0]
こんなの渡すのは通常は問題じゃないの?
0437434
NGNG素直にstd::vector<char>とか渡せばいいのかな。
0438デフォルトの名無しさん
NGNG書き込んだ結果途中で\0なんか入れられたら
訳分からんことにもなろうし
0439デフォルトの名無しさん
NGNGSTLスレで見かけたんだけどstd::stringではstd::vectorと違い要素が連続していなくてもいいらしい。
そんなのありえないだろうけどやめとけ。
0441デフォルトの名無しさん
NGNGもうそろそろ統合する時期なのかも。
Boostスレはまだ統合しなくてもいいけど。
0442デフォルトの名無しさん
NGNGそろそろ統合する時期っつーか、
C++とtemplateの2スレでやってきたところに
突然このスレが発生したわけだが。
0443デフォルトの名無しさん
NGNG0444デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG自作のクラスの中でメモリを確保していた部分を
vectorで書き直そうと思っているのですが,
互換性などは問題ないのでしょうか?
STLと一言で言ってもライブラリを作っているところは
いろいろあると書いてあったので.
0447デフォルトの名無しさん
NGNG> 自作のクラスの中でメモリを確保していた部分を
って何?
new char[] ?
0448デフォルトの名無しさん
NGNG問題ない。心配ならSTLPortでも使うといい。
0449デフォルトの名無しさん
NGNG自作のクラスAの中でクラスBの配列を動的にnewで生成してたんですが,
その部分をvectorで書き換えるとBの最大値を簡単に変更できて
便利だと思いまして.
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNGそゆ事ならどんどんやってください。
最大値→サイズ
0452デフォルトの名無しさん
NGNGfor_eachのみ(無名関数)で頑張るために新しい文法(lambdaの)を駆使するより
普通に関数つくるかforループ回したほうがよくないですか?
最初のサンプルで簡潔に書けることを示している部分には同意しますが
例外処理してる部分なんてみにくいだけのような気がします
(こんなことも出来るよサンプルだとは思います)
私の理解不足でしょうか。
0453デフォルトの名無しさん
NGNGおとなしく言語仕様に加えろと。
0454デフォルトの名無しさん
NGNG0455452
NGNG関数内のローカル関数がかければ随分違ってくるのでしょうか
sortの比較にちょちょっと使う程度なら便利だよってことでしょうか
0456デフォルトの名無しさん
NGNG関数内のクラスをテンプレートに渡したいと思う場面は頻繁に発生します。
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG> template 引数が外部リンケージ(でしたっけ?)を持たなければいけないという仕様はなぜ生まれたのでしょうか。
おそらく、テンプレートがインライン展開されなかった場合のシンボルが重複しない
ように、だと思われ。
0459デフォルトの名無しさん
NGNG安心しろ、俺も頻繁だ。
0460デフォルトの名無しさん
NGNGhttp://www.freeml.com/message/[email protected]/7818
http://www.freeml.com/message/[email protected]/7937
こういうのはどうだ?
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG結局のところ、どんなに頑張っても…、という空しさが募るばかりです。
0464デフォルトの名無しさん
NGNGさっさとRubyに移行しろ低能ども
0465デフォルトの名無しさん
NGNG安心しろ、俺もだ。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGサンプルコードとかテストコード書くときはちょっと便利そうだけど
俺の理解が浅いだけかな
0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG> 正直、lambdaがあってもそんなに便利になるとも思えないんだけど
compose や bind をネストして書いてると、C++ のコード書いてるんだか
Lisp プログラミングしてるんだか分からなくなるぞ(w
0471デフォルトの名無しさん
NGNG知らないってのは哀れなことだ。
世界がC++で閉じてるんだろ?
しかもそのC++も十分使いこなしてないだろ?
0472デフォルトの名無しさん
NGNGlambdaが便利だという例を示してくれ。
可読性落としても分かりにくいコード書いて嬉しいか?
LispならともかくC++でlambdaって意味わかんね。
0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG整数にる内部足し算は可能なのに
(var(m)=_1+_2)(n,k)・・・・・・ok
オブジェクトによるもろもろの操作が出来ない・・・・coutは出来るのに
(var(ob)=_1+_2)(n,k)・・・・・NG
メンバー正しく呼び出せない (+-*/%=,etc…)はラムダのメンバー関数で解釈されるからだと思うんだけど。
解決方法にbind(C::get,bind(operator+,_1,_2),var(m))(c1,c2);
こんなことやってらんないし。
0476デフォルトの名無しさん
NGNG良くあるのが構造体中の一要素をキーとして、何かする場合。
struct foo { int key; int val; };
std::vector<foo> foo_list;
using namespace lambda;
// key が 3 のものを探す
std::find_if(foo_list.begin(), foo_list.end(), bind(&foo::key, _1) == 3);
// key の昇順でソートする
std::sort(foo_list.begin(), foo_list.end(), bind(&foo::key, _1) < bind(&foo::key, _2));
いちいちファンクタ作るのも面倒だし、まして SGI STL にある compose とか
組み合わせて作ってたら、可読性の悪さは boost::lambda の比じゃない。
0477デフォルトの名無しさん
NGNGokとNGは何が違うの?
0478デフォルトの名無しさん
NGNGその方がコンパイル速いし 可読性もあるし
0479デフォルトの名無しさん
NGNGob, n, kがユーザ定義型なんですか?もしそうならret使ってくださいな.
http://tinyurl.com/5dyye
0480デフォルトの名無しさん
NGNG0481479
NGNG日本語ドキュメントはこっち.
http://tinyurl.com/4copy
あと,これも.
http://tinyurl.com/6tnv9
0482デフォルトの名無しさん
NGNG> その方がコンパイル速いし 可読性もあるし
コンパイル速度はともかく、可読性は慣れのような気がする。さすがに
boost::bind() を 3 つも 4 つもネストさせて合成関数作るようなコードは
アレだが、476 程度で「読みにくい」っつーことはあるまい。
0483デフォルトの名無しさん
NGNGCをユーザー定義型として、friendのoperator+を持っています。
で、先の式の説明をいたしますと
C c(10), d(20), m(0);
(var(m) = _1 + _2)(c,d);
ラムダ式でmに代入をするという目的だけの式が作れないんですよ。
なんで?って感じでいまだに謎のままです。
0484デフォルトの名無しさん
NGNGlambdaは内部に戻り値の型を推論するための特殊な機構を使っています.
組み込み型の演算子の戻り値型推論,例えばint + intの戻り値がintになるといったような推論は
ライブラリに元から組み込まれていますけれど,ユーザ定義型に対しては定義されていません.
なので,以下のどちらかが必要になります.
その1:retでoperator+(C,C)の戻り値の型を明示する
(var(m) = ret<C>(_1 + _2))(c, d);
その2:Boost.Lambda内の戻り値型推論機構をCに対して特殊化する
// 先にlambda.hppをインクルードしておく
namespace boost{namespace lambda{
// operator+(C,C)の戻り値の型をCに指定する
// これを一度定義しておくと以降は+に対してretを指定する必要はなくなる
template<> struct plain_return_type_2<arithmetic_action<plus_action>,C,C>
{ typedef C type; };
}}
詳しくは481に挙げたドキュメントを参照してください.
0485デフォルトの名無しさん
NGNGおฺぉฺすฺげฺぇฺ〰ฺ
ってゆう前にごめんなさい。よく読んで無かったですね。
「Extending return type deduction system」もろですね。
0486デフォルトの名無しさん
NGNG構造体の定義書いて、さらにそこでしか使わないようなファンクタなら
無名namespaceで囲わなきゃいけないから面倒だし、
構造体の定義は関数中に書いてもテンプレート引数には渡せないから
わざわざグローバルなスコープに戻って定義しなきゃならん。
これだと読むときにも、いちいちファンクタの定義探すのが面倒なんだよね。
ただ、さすがにforループとか例外までlambdaで使う気にはなれんけど。
そこまでやるなら、関数に切り分けた方がいいと俺の構造的プログラミング勘が申しております。
0487デフォルトの名無しさん
NGNG0488デフォルトの名無しさん
NGNGそこはケチるところではないと思う。
と半年Java漬けで毒されつつある俺は思う。
0489デフォルトの名無しさん
NGNG結局これはインラインで滞りなく書けることに意義があるんだよ。
boost::lambdaは実装者の自己満足でしかない。
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNGCだよ
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG逆に迷惑かも
scanfやstrtokみたいな弊害というか
0495デフォルトの名無しさん
NGNGboostは
正式に標準なわけでも正式に準標準なわけでもないのだから。
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG┌ー| ヽ、
/ .| ヽ、
/ .| ヽ
/ 〉 .ヽ
, '/ ! ハ ヽ り
,.' / !! ! ヽ |ヽ :::::! :: ::! ::',
/ / ! ! ! ヽ ! ヽ :::.! ::: :::::! :;
/ ,リ :::::::!.! ! ヽ ! ヽ ヽ ::! ::: :::::! :!
! ハ ::::::::::! ! .! ヽ .! ヽ ヾ、 ! :::: :::::! :! なんなのよこいつら・・・
! ; ! .::::::::::!__!」,,, ヾ__\__ヽ,,, :::::::::! .:::: ::::::! .:::',
レ' .! :::::! :::ヽ ヾ ミヽ ヽ ̄  ̄ヽ、ヽ`:::::::.! .:::: .::::/ :::::',
! :::!i ::::::::!《てソヽ "ソて)~ミミア .::: .:::::/:::: !:人ヽ
', ::! ',::::::::ヾ. r ';;ヘ " ヽ ;;;;;。ソy :::/ ..:::::メ:::::: !:::::!`-ゝ
',::!. ', ::::::::', ゝ彡゚ ゝー"/:::イ .::::メノ::::::リ、:::!
'ソ . ',从::::', , /// 彳' N:::リ ヽ:!
i! ヾ、:::ヽ ` /",/ /:::: ハ:リ ソ
ヾ:::!ゝ ヽつ u ,/,/:/:::::::::/ V
V 丶、 ,, - ":::::::レ'!:::::八 :l
` ーヾ!::::::::::::::: ,!ゝソ .V
イ ,!::::::: / \
, -'"/ ヘ ___/ .! !. \
, - '" // , ク-くヾ ! !:::::::::\
, - '" ,///イ ヽヽ // :::::::゙ -、_
ヾ;ン" 〉-、/ヽヽニ彡 ゙-、_
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG通報しますた
森へおかえり
http://idol.bbspink.com/test/read.cgi/hgame2/1096640890/
0502デフォルトの名無しさん
NGNGまだ現役スレがあるのか……
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNGふつうに委譲で怪傑できないんですか?
0505デフォルトの名無しさん
NGNG委譲でもいけるし、STL でも iterator_traits なんかはそうなってると思うが。
具体例プリーズ。
0506デフォルトの名無しさん
NGNG>They are inherited from, or contained within, other classes.
このAndrei Alexandrescuの定義だと委譲によるものもポリシーと呼べるんじゃないですかね.
0507デフォルトの名無しさん
NGNGメソッド群をprotectedにするのは悪いっすか?
0508デフォルトの名無しさん
NGNG>>506のヤシの本に理由が書いてあった気がする。
すっかり忘れた上に手元に無いので答えられないが。
移譲の場合、スコープ解決演算子とかを使って定義位置を明確にしないと呼び出せないあたりだったかも。
0509デフォルトの名無しさん
NGNGprotectedにしても機能するんならいいんじゃない?
わざとそうする理由あるか別だが
0510デフォルトの名無しさん
NGNG継承を使うと、特定のポリシクラスにpublicなメンバを追加することで、
そのポリシとホストクラスを組み合わせたときの公開インタフェースを
後付けで拡張できる。ホストクラスを変更することなく、ね。
...というのが理由だったような気がする。
>>507
ポリシクラスのprotectedなメンバはホストクラスの公開インタフェースにならない。
公開されたくないメンバはprotected、そのまま公開したいメンバはpublicがよさげ。
ただ、あまりこだわると面倒かも。
0511デフォルトの名無しさん
NGNGインタフェースを後付けで拡張できるっていいね。
アルゴリズムが共通性でインタフェースが可変って、GoFスレで
話題になってるマルチパラダイム
0512デフォルトの名無しさん
NGNGそれって adapter で切り替えるのと比べて なんか違うの?
0513デフォルトの名無しさん
NGNGのとadapterで切り替えるのじゃ違うべ
実用的にどう違うか説明できん鬱
0514デフォルトの名無しさん
NGNG>継承を使うと、特定のポリシクラスにpublicなメンバを追加することで、
>そのポリシとホストクラスを組み合わせたときの公開インタフェースを
>後付けで拡張できる。
これって結構危ない気がするんですけどどうなんですかね?
ホストクラスの名前空間をユーザの側で自由に汚せるのが気になるんですが・・・.
特にホストクラスの非公開インターフェース(通常ユーザには明示されない)と
ユーザがポリシークラスに追加した公開インターフェースが衝突したら
目も当てられないと思うんです.
ポリシーはあくまでライブラリ設計者が想定する有限の選択肢
(公開インターフェースの可否を含む)の中から
ユーザが選択するようにするのが安全だと思うのですが,どうでしょうか?
0515デフォルトの名無しさん
NGNGpublic継承では、リスコフの代入規則に則り、IS-AとWORKS-LIKE-Aの両方の
モデルが成り立つことを常に確認しておくこと。オーバーライドされたメンバ関数は
「それ以上も、それ以下も要求しない」が原則である
だって。
0516デフォルトの名無しさん
NGNG継承にしとかないと、空のポリシークラスがサイズを持ってしまうのが問題なんじゃないの?
0517デフォルトの名無しさん
NGNG>ホストクラスの非公開インターフェースとユーザがポリシークラスに
>追加した公開インターフェースが衝突したら目も当てられない
非公開インターフェースといえどもソースコード上見えてるんだから
普通そんなことにはならないだろ
0518510
NGNG> これって結構危ない気がするんですけどどうなんですかね?
基本的にyes。
> ポリシーはあくまでライブラリ設計者が想定する有限の選択肢
> (公開インターフェースの可否を含む)の中から
> ユーザが選択するようにするのが安全だと思うのですが,どうでしょうか?
基本的にyes。
多重継承によるポリシ切替は、型パラメータで基底クラスを取り替えるという
ある意味乱暴な実現手段を使っているということを念頭に置いた方がよい。
これはC++本来の基本設計で想定された使い方ではないだろうし、
リスコフ置換則に従っているとも言い難い。トリックを駆使しているんだから、
処理系がプログラマのミスに気づいてくれないこともある。
だから、ポリシ+ホストという実装方法は慎重に扱わなければならない。
これだけでもあまり安全な使い方ではないんだから、ホストクラスの
想定から外れるポリシクラスはなおのこと慎重に使う必要がある。
トリックを使うコストに見合う利益が得られるときのみに限り、
基本から逸脱した使い方をするべき。
>>516
> 継承にしとかないと、空のポリシークラスがサイズを持ってしまう
見落としてた。どちらかというとサイズ問題の方が重要かも。
0519513
NGNG> これって結構危ない気がするんですけどどうなんですかね?
ある程度yes。
> ポリシーはあくまでライブラリ設計者が想定する有限の選択肢
> (公開インターフェースの可否を含む)の中から
> ユーザが選択するようにするのが安全だと思うのですが,どうでしょうか?
基本的にno。
多重継承によるポリシ切替は、型パラメータで基底クラスが取り替えるという
ある意味これまでと違うパラダイムを使っているということを念頭に置いた方がよい。
これはインタフェースを中心に据える古典的な設計で想定された使い方ではない
だろうけど、Liskov置換則に従ってやる分には問題ない。
ただし、多重継承を利用して切り替えるポリシと委譲によって切り替えるポリシの
選別はホストクラス側で注意深くやってくれているとの前提に立ってのことだ。
確かにポリシ+ホストという実装方法は慎重に扱わなければならない。
各々のポリシクラスの"意味"はホストクラスの想定範囲内になければならない(High
Cohesionを保つという意味で)。だが実際にどんなインタフェースを提供するかは
ホストクラスの監督範囲外だ。
何が"基本"であり何が"逸脱"であるかはパラダイムによって異なる。
>>516
> 継承にしとかないと、空のポリシークラスがサイズを持ってしまう
サイズ問題が重要な場合は無視できないでしょうね。
0520デフォルトの名無しさん
NGNGこれに相当する処理をSTLのみで実現するにはどうやったら一番効率がいいですか
0521デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG521の案が1番良いと思うが。
0524デフォルトの名無しさん
NGNGNotes の [1] に
"Copy_n is almost, but not quite, redundant. If first is an input iterator, as opposed to a forward iterator, then the copy_n operation can't be expressed in terms of copy."
とある。
copyを使うと「 istream_iterator から3つ読み込む」などのケースでエラーになってしまう。
0525デフォルトの名無しさん
NGNG無ければ作れば良いだけなんでは?すぐに書けるでしょう.
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGcopy_nも自分で書くのが一番いいのではないかと。
0528デフォルトの名無しさん
NGNGまあここはSTLの範疇になかった悲しい例ってことでお茶を濁すのが正解だね!
0529デフォルトの名無しさん
NGNGgeneric functionになっているのが良いところだから、
どんどん標準に入れちゃえばいいと思うんだけど…
methodだと流石に躊躇するけどね。
0530デフォルトの名無しさん
NGNGなぜにcopy_nを取り入れてやらないかね。変な所で頭固い?
0531デフォルトの名無しさん
NGNGそんな事いったらコンテナだってそうだし
標準である事に意味があるのにね
0532デフォルトの名無しさん
NGNG他人に使ってもらえるようなライブラリを書くには
相当の知識と経験が必要
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNGvoid copy_n(I InIt, size_t n, O OutIt)
{
while (n--) {
*OutIt = *InIt;
++OutIt;
++InIt;
}
}
一工夫って、単純に上のように書いただけじゃあだめなの?
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNGそんな遅い実装されたライブラリを誰がつかいたがる?
0537デフォルトの名無しさん
NGNGもっといい方法があるのか?
0538デフォルトの名無しさん
NGNGcopy_nって終了後の入力イテレータ返さないとまずいですよね?
(STLPortの実装では返り値が入力イテレータと出力イテレータのペアになってる)
標準に入らなかったのはここら辺でもめたからではないでしょうか?
>535
OutputIteratorには「終わり」を判別する方法がまったくないです.
>536
ディスパッチするべきだという指摘ですよね?
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNGこれって例外安全じゃないよね?
真面目にやるならSwap関数が必要になるんじゃない?
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGコピーされる型の代入演算子を呼ぶ以上、nothrow guarantee は無理なのでは。
また、strong guarantee のためにはコピー先のイテレータがバイディレクショナルである必要があるから
現状の basic guarantee のみを満たしている状態が妥当なんだと思います。
多分ですけど。
0544デフォルトの名無しさん
NGNG普通は要求するべきではないでしょう.標準でもこれに関しては要求してません.
唯一の例外はuninitialized系だけです.
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNG式の日取りはいつが良いですか?
・・・じゃなくて,bidirectionalはstrongの要求としては強すぎませんか?
forward(multipass)で良いと思うのですが・・・.どちらにしろ高コストですけれど.
0548541
NGNG*OutIt = *InIt;
++OutIt;
++InIt;
全部例外投げる可能性があるのもなぁ
0549543
NGNGあ、そうですね。思い切り勘違いしてました。
式は、まあ、考えておきます・・・。
0550デフォルトの名無しさん
NGNG0551542
NGNGいい場面なのかもな
0552デフォルトの名無しさん
NGNGSwapがあれば例外安全なcopy(first,last,result)が実装できるの?
0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG例外安全なSwapがあれば・・・という話だ
0555デフォルトの名無しさん
NGNG例外安全なSwapがあれば・・・という話だ
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNGswap があってもダメでしょ。forward iterator だと、そもそも「二回読み出せない」
なんつーのもありえる(標準入力とか)から、最初の要素をコピーした直後に例外
が発生すると、どのみち元には戻らない。
0559デフォルトの名無しさん
NGNG○例外安全なSwapの存在を前提として、ケースによっては...
鬱
0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNGtemplate<typename T, typename R, class GV> R total(T* t, int n, GV getValue)
{
R ret;
for(int i=0; i<n; ++i)
{
ret += getValue(t[i]);
}
return ret;
}
class Person
{
int age_;
pubic:
Person() : { age_ = rand() % 80; }
int getAge() const { return age_; }
};
main()
{
Person ps[50];
cout << total(ps, 50, std::mem_fun(&Person::getAge) << endl;
}
これが通って希望通りの動作をするようにするにはどう変更すればいいでしょうか?
自分でtemplateを書いて使う勉強をしてるので、accumulateを使えとかそういうのはいいです。
0562デフォルトの名無しさん
NGNGコンパイルして、文句言われる部分を凝視するのがいいかと
0563デフォルトの名無しさん
NGNGありがとうございます。
とりあえずtypoとか余計なコロンを直して、
total(ps, 50, std::mem_fun(&Person::getAge)でしかエラーが出ないようにしましたが、
解決したい事の本質は、
getValueがRを返す事をどうやってtemplateで教えてあげればいいのか?
戻り値があるとmem_funが通らないような気がするのはどうすれば解決できるのか?
の2点だと思います。
一応typo直して残ったエラーメッセージはこれです。
error: no match for 'operator<<' in 'std::mem_fun(_Ret (_Tp::*)()
const)
[with _Ret = int, _Tp = Person]() << std::endl'
error: 構文解析エラー before `;' token
0564デフォルトの名無しさん
NGNGmem_fun→mem_fun_ref
それから
template<typename T, typename R, class GV>
R total(T* t, int n, GV getValue);
としてるが、R型の引数がないので型推論が出来ない上、内部で取ってる
retという変数が初期化されていない。
R&型の引数をとるようにしてmain内の一時変数をそれに与えろ。
0565デフォルトの名無しさん
NGNGその通りにやったらできました。
accumulateになんで初期値を渡さないといけないのか分かった気がします。
0566デフォルトの名無しさん
NGNGと書いている間に解決してるっぽいorz。
まず返り値Rを教えてあげる方法だけど、
<functional>で定義されている1引数の関数オブジェクトは全部構造体unary_functionを継承しているから、
GV::result_typeで返り値の型は取得できる(でも面倒なのでこれ以降はRと略す)。
もしtotal関数に生のポインタを渡したくなったら、std::ptr_funを使う必要がでてくるけどね。
だから、この場合、関数宣言はこんな感じになる。
template<typename T, typename R, class GV> typename GV::result_type total(T* t, int n, GV getValue)
mem_funについては、mem_fun(R (T::*f))で作られた関数オブジェクトFに、
T*型の変数pを渡してF(p)のように呼び出すときに使う。
この場合だと、t[i]の型はT型(T&型)だから、mem_fun_refを使う必要があるわけ。
>>564 の人も言っているけど、retの値は初期化しないとだめ。
そのためには、total関数に新しく引数 R& ref を作って呼び出し側に渡してもらうか、
あるいはboostというライブラリのvalue_initializedという小道具を使うか。
ttp://www.kmonos.net/alang/boost/classes/value_init.html
さらに難癖をつけるなら、せっかく型Tをテンプレート引数としてとっているのだから、
total内のforループの部分はもっとSTLのイテレータを意識した書き方をするべき。
R total(T t, int n, GV getValue) のように引数を宣言して、
while(n--)
ret += getValue(t++);
のようにすれば、totalの第一引数にvectorやlistのイテレータだって渡せるようになる。勿論、Person型への配列も。
この場合、mem_fun_refじゃなくてmem_funを使う必要があるね。
もしこのmem_fun周りの使い分けが面倒だと思ったら、boostのmem_fnを使ってみるといい。
ttp://www.kmonos.net/alang/boost/classes/mem_fn.html
ttp://boost.cppll.jp/HEAD/libs/bind/mem_fn.html
0567デフォルトの名無しさん
NGNGtemplate<typename T, class GV> typename GV::result_type total(T* t, int n, GV getValue)
に訂正してくださいです……。
あと第5段落5行目はret = getValue(*(t++))にしてください。
これだとmem_funを使う事になるのかな?
0568564
NGNGtotal(T* t, int n, GV getValue,〜
じゃなく
total(IT begin, IT end, GV getValue,〜
なんて標準ぽい書き方にしといたほうがいいな
0569デフォルトの名無しさん
NGNGtemplateの勉強なら各実装のSTL読むのも一興。
0571デフォルトの名無しさん
NGNG0572デフォルトの名無しさん
NGNGcopy-constructor と nothrow-swap を用いることで
copy-assignment に strong guarantee を与えるという話。
コードはこんな感じ
T& T::operator = (const T& t)
{
T(t).swap(*this);
return *this;
}
0573デフォルトの名無しさん
NGNGそれは代入演算子の実装。
copyに>>534以上の例外安全性を持たせることができるのかって話。
0574572
NGNGコピーを複数回するとなると strong guarantee を保障するのはより面倒。
どう面倒なのかは上の方を参照のこと。
0575572
NGNGcopy の仕様?を変えない限り無理。
出力先のイテレータに ForwardIterator であることを要求し、
かつコストを無視してもよければ、まあできるんじゃない。
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNG良いでしょ。ま、誰にも勘違いはあるってことで、あまり苛めずに
スルーするのが人情かと。
0578デフォルトの名無しさん
NGNG約577-520の久々の長スレ
乙。
0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNGプロジェクトが長くなればなるほど重しになっていくような気がする
0581デフォルトの名無しさん
NGNGboostのどのへん?
0582541!=542==554==558
NGNGケースによっては...
ってちゃんと言ってるぞ!
しかも542にも学生注目
0583デフォルトの名無しさん
NGNGスルーしてやろうってのに、妄言追加してどうするよ。
0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNGswap関数と例外安全性と複数回コピーとの関連が複雑でわけわからん
ことになってしまいました。
ケースによっては、とか更に理解困難です。
0587デフォルトの名無しさん
NGNGイテレータによる範囲コピーなら、範囲の長さに応じた(動的な)容量が必要になる。
strong guarantee を提供するためにはこの領域を copy 関数内部で取る必要があるが、
その負荷は標準アルゴリズムとしては受け入れられないだろう。
>>586
妄言を理解しようなんて無理だから安心しる。
0588デフォルトの名無しさん
NGNGさらに付け加えて失敗時のロールバックで例外が投げられるという最悪の事態も想定されると思うですがどうでしょうか?
0589デフォルトの名無しさん
NGNG失敗時のロールバックに nothrow swap が必要になるんだろ。
0590デフォルトの名無しさん
NGNGまあ、例外安全性は確保されてますが。
0591588
NGNG>590
イテレータのみを知ってる状態ではそれが不可能な場合が有り得るように思えるのですがどうでしょうか?
そのような操作にはno throwなswapが可能なSappable Iteratorであることが要求されるように思うのですが…
(そしてこのような要求は例えばvectorのイテレータでは達成出来ないように思います)
0592デフォルトの名無しさん
NGNG要するに、>575 の条件プラス nothrow swap が必要となるわけか。
nothrow swap が加わるのは厳しいな。
0593588
NGNG無視してやってください.混乱させて本当にすいません.
589, 590さんのおっしゃる通りです.
>592
nothrow swapは例外安全のための最も基本的な要素なので
「厳しい」というのはどうかと思います.
0594586
NGNG『nothrow swapの存在が前提で、なおかつバックアップを
とるなどの負荷を受け入れられるケースでは、』例外安全にできる(かも)、
って単純に理解しとけばいいですか?
0595デフォルトの名無しさん
NGNG#include <vector>
#include <algorithm>
#include <iterator>
template< typename InputIterator , typename ForwardIterator >
ForwardIterator strong_copy( InputIterator first , InputIterator last , ForwardIterator result )
{
typedef typename std::iterator_traits< ForwardIterator >::value_type value_type;
std::vector< value_type > backup;
ForwardIterator const result_first = result;
try
{
while( first != last )
{
backup.push_back( *result );
*result = *first;
++result;
++first;
}
return result;
}
catch( ... )
{
std::swap_ranges( backup.begin() , backup.end() , result_first );
throw;
}
}
// ・入力も ForwardIterator に狭めれば backup に reserve をかけることができる
// ・reserve できないなら、 backup は vector よりも list,deque のほうがいいかも
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG50時以内ってのと、誰がそれではいけないと言ったのかがよくわらんが、
first+n は RandomAccessIterator でしか使えないからじゃないか?
0598デフォルトの名無しさん
NGNGそれじゃ妄言と同じだぞ。もっとよく考えろ
0599デフォルトの名無しさん
NGNG0600デフォルトの名無しさん
NGNG俺だけか?
こんなふうに。
template< typename InputIterator , typename ForwardIterator >
ForwardIterator strong_copy( InputIterator first , InputIterator last , ForwardIterator result )
{
typedef typename std::iterator_traits< ForwardIterator >::value_type value_type;
std::vector< value_type > backup;
ForwardIterator const result_first = result;
try
{
while( first != last )
{
backup.push_back( *first );
++result;
++first;
}
std::swap_ranges( backup.begin() , backup.end() , result_first );
return result;
}
catch( ... )
{
throw;
}
}
0601デフォルトの名無しさん
NGNGそれでも STL で定められている入力イテレータ・前方イテレータのコンセプトを
前提とする限り strong guarantee は得られない。
*result = *first;
ここでイテレータを介した読み書きが副作用を伴う(たとえば *result = 1 と
すると標準出力に 1 と表示されるようなイテレータとか)だとアウト。また
入力イテレータは二回以上読み出せることを保証してない。
単なる入力イテレータ・前方イテレータではなく、より制約のきついコンセプトを
決める必要がある。
0602デフォルトの名無しさん
NGNG600ゲットしてるぞ。ちなみに俺もそう思ってた。
Exceptional C++に載ってる標準例外安全規則によると、
『例外を投げる可能性のあるコードをすべて取り出し、別の場所で
安全に処理すること。その後、本来の処理の成功を確認した時点で、
例外を投げない処理だけを使ってプログラムの状態の変更を行う』
とあるので、成功時にnothrow swap を使うというのはまさにその通り
だと思う。
0603デフォルトの名無しさん
NGNGその考えならコードはこれで十分だろう。
template< typename InputIterator , typename ForwardIterator >
ForwardIterator strong_copy( InputIterator first , InputIterator last , ForwardIterator result )
{
typedef typename std::iterator_traits< ForwardIterator >::value_type value_type;
std::vector< value_type > backup( first , last );
return std::swap_ranges( backup.begin() , backup.end() , result );
}
result に対して operator= を使わないことになるが、
swap_ranges を使う限り、要求としては >>595 と同じものになるだろう。
0604デフォルトの名無しさん
NGNGresult にはtemplate仮引数名で ForwardIterator を要求しているから、
標準出力に出るようなイテレータはそもそも対象外。
また、>>595のコードでは入力からは一回しか読んでいない。
問題があるとすれば、 ForwardIterator の制約が
swap_ranges に渡せるイテレータとして十分かどうか、だろう。
0605デフォルトの名無しさん
NGNG> また、>>595のコードでは入力からは一回しか読んでいない。
例外発生時に [fist, last) から二度と読み出せないので、情報が失われて
しまう。
0606デフォルトの名無しさん
NGNG書き込みを実行するのとじゃ安心度が違うような気がするんだが。
0607デフォルトの名無しさん
NGNG> 例外発生時に [fist, last) から二度と読み出せないので
あーそうか。
そうなると、入力も ForwardIterator にしとかないと、
strong guarantee とは言えないな。
ってことは、 uninitialized_copy も同じ問題を持ってるな。
↓で strong guarantee を持つ操作として挙げられてるのは不適当ってことになる?
http://www.stlport.org/doc/exception_safety.html
0608デフォルトの名無しさん
NGNGForwardIterator x に対する *x は value_type& を返すことを要求されるので swap の引数とすることができる。
この制約があれば swap_ranges に対して ForwardIterator は適格といえる、たぶん。
0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNG隊長っ!!こんなものを発見しますたっ!!
http://tinyurl.com/46plq
0611デフォルトの名無しさん
NGNG結構な文量だな。
要約すると、
標準入力がエラーで巻き戻せないのは標準出力の仕様で、
そんなもんを扱ってる限り、 strong guarantee なんて無理無理無理無理
だから STL の例外安全性を語るときにはそんなもんアウトオブ眼中じゃ
って感じ?
0612デフォルトの名無しさん
NGNG0613デフォルトの名無しさん
NGNGユーザが与えた型(イテレータ含む)の副作用の面倒までは見ない,
ということみたいですね.
> *to understand that guarantee correctly, you must realize that side-effects
> of user-supplied types (including iterators) are not covered.
「istream_iteratorのincrementによる入力の消費」も
当然Strong Guaranteeが面倒を見ないside-effectということになるんでしょう.
そりゃ確かにそんなもの面倒見切れるはずないですけれど・・・.
個人的にすごい違和感を感じます・・・.
0614デフォルトの名無しさん
NGNG安易に「istream_iterator」に結び付けてしまうのがいけないんでしょう.
「istream_iteratorをstrong_copyに渡して例外が飛んだら入力が失われるから
Strong Guaranteeじゃねぇぞヽ(*`Д´)ノゴルァ」と文句を言うのは,
「あるグローバル変数をincrementする特殊なInput Iteratorを
strong_copyに渡して例外が飛んだらその変数が変化したままだから
Strong Guaranteeじゃねぇぞヽ(*`Д´)ノゴルァ」と文句を付けるのと
全く同等だ,ってことなんでしょう.(後者がナンセンスなのは明白でしょう)
ユーザが任意に設定し得る副作用の巻き戻しまで面倒を見切れるはずがない.
だからStrong Guaranteeの定義で,副作用の面倒は見ない,とした.
要するに結論はstrong_copyはInput Iteratorを入力に取れる,ですね.
・・・でもやっぱり納得できねぇ!
0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNG>>614が納得するかしないかはどうでもいい。
規格としてしごくまっとうだし、使う側として問題ない。
0617デフォルトの名無しさん
NGNG0618デフォルトの名無しさん
NGNG興味はあるんだが、今一実態がつかめん。
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGテンプレの使い方テクの正体が分らないなら、一旦Haskellやってみたら?
C++のテンプレの使い方はかなり変則的だけど、その元ネタはあっちから来てるケースが多いんで
向こうの方が本質が見えやすいから。
0621デフォルトの名無しさん
NGNG型安全なマクロ
最適化を阻害せず、型安全かつ型に依存しない汎用関数プログラミングができる。
その辺を突き詰めてくと関数型プログラミングみたいなのもできるわけだけど、
C++の構文の上にテンプレート独自の構文、セマンティクスが混ざり合って
不思議な世界が拓けてくるわけだが、やりすぎると職場の誰もフォローできない
メンテ不可なゴミコードができる。
構造化プログラミングのグローバル変数とかgotoとか一関数10000行のプログラム
なんかと、一緒。
本質なんかどうでもいいから、STLとかboostとかに触れてみれば面白いんで無いかい?
0622デフォルトの名無しさん
NGNG> 型安全なマクロ
再帰も加えといて。
// cppのマクロはm4と違って再帰展開がダメ。
0623デフォルトの名無しさん
NGNG使い方がとてつもなく寒いな、べつにいいけど
0624デフォルトの名無しさん
NGNGComing soon - Version 1.32.0
0625デフォルトの名無しさん
NGNGおおおそうか。楽しみだ。
0626デフォルトの名無しさん
NGNG0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNGttp://jbbs.livedoor.jp/bbs/read.cgi/computer/5651/1048584601/88
0631デフォルトの名無しさん
NGNGシリアライズ キター━━(゜∀゜)━━!!
0632デフォルトの名無しさん
NGNGファイルになってるけどstringとして吐いたりstreamに吐いたりは出来ないの?
0633>>630の記事書いた人
NGNGできます。書き方が悪かったですね。
出力先は任意のストリームです。
0634デフォルトの名無しさん
NGNGマジ感動した。
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNGキタキタおやじ。(゚д゚)ウマー。
0638デフォルトの名無しさん
NGNGBoooooooooost!
0639デフォルトの名無しさん
NGNGの3つでもう(*´д`*)ハァハァ
0640デフォルトの名無しさん
NGNGあのワクワク感を久しぶりに味わった
0641デフォルトの名無しさん
NGNGグラフ図やネットワーク図のような
多対多で経路数も異なるリストを作りたいのですが
multimup系(stlport::hash_multimap)にしてValueに
prevとnextのitelatorをstd::listで持つ
という設計しか浮かばないのですが
良い方法教えて下さい
0642デフォルトの名無しさん
NGNG0643デフォルトの名無しさん
NGNGどうやって使うかを書かないと回答のしようが無いと思いますが、
とりあえず boost::graph ではいかがでしょうか?
0644641
NGNGマルコフ連鎖を作りたいのです。しかも複数連鎖で最長Hitを基本に。
人工無脳のようなものをCで作りたいといえば良いでしょうか。
0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNGi += hogehoge;
としたあとの i が有効かどうかは
begein() <= i < end()
と判断してOKですよね?
0647646
NGNGでもまあお願いします。
0648デフォルトの名無しさん
NGNGランダムアクセスイテレータならばbegin()に直せば
begin() <= i && i < end()でよい。
0649デフォルトの名無しさん
NGNGありがとうございます。
そもそも比較演算子が定義されているということは、と考えれば当然だと思いましたが
自信が無かったもので。
0650デフォルトの名無しさん
NGNG行単位で操作とかしたいんですが
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNG範囲外のイテレータの比較ってokだっけ?
i += hogehoge;する前に、
begin() - i <= hogehoge && hogehoge < end() - i
とした方がいいんじゃないだろうか。
0654646
NGNGプログラミング言語C++第3版(p.646)のChecked_iterではそのようになっていました。
より安全そうな事前チェックにしておきます。
0655デフォルトの名無しさん
NGNGstlport::hash_multimapを使って複数Hitしたらその中からRandomで
一つのItemを取り出したいと思って 手始めにrandom_shuffle()
を使おうとしたのですがコンパイラにはじかれます
hash_multimapはランダムアクセス不可なんですか?
また、上記の要望を満たす良い方法は無いですか?
おながいします。
typedef stlport::hash_multimap<int,int> MM;
MM h;
stlport::pair<int,int> p;
stlport::pair< MM::iterator, MM::iterator > r;
r = h.equal_range(1);
stlport::random_shuffle( r.first, r.second );
0656デフォルトの名無しさん
NGNG> 範囲外のイテレータの比較ってokだっけ?
いや、駄目。
ランダムアクセスイテレータの一種であるポインタがまず駄目だし。
0657デフォルトの名無しさん
NGNG↑これの左下の問題ってさあ
template<class T, class Operator, size_t size>
class 魔方陣;
としたときの
魔方陣<Shape, XOR, 3>;
だよな?
0658デフォルトの名無しさん
NGNGポインタが範囲外になってもアクセスさえしなければ問題ないのでは?
int *a = new int[10];
cout << a - 10;
これも未定義なのですか?
0659デフォルトの名無しさん
NGNGそういう意味じゃなくて、不等式の結果の問題。
ISO/IEC 9899:1999 6.5.8 Relational operators参照。
0660デフォルトの名無しさん
NGNG未定義
0661デフォルトの名無しさん
NGNGアドレス参照が許されるのは、その場合だと a から a + 10 まで。それ以外は
未定義。
現実にはまずないと思うが、仮に a がアドレス 40 番地とかに割り当てられて
たらa - 10 が NULL と一致する可能性もあるわけで。
0662658
NGNG0663658
NGNGJIS X3010:2003(これはC99かな)しか確認できていませんがたしかに未定義と書かれていました。
JIS X3014は17000円もするのか。図書館行ってきまつ。
0664デフォルトの名無しさん
NGNGhttp://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+9899-1999
0665デフォルトの名無しさん
NGNGhttp://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+14882-2003
0666デフォルトの名無しさん
NGNG> hash_multimapはランダムアクセス不可なんですか?
はい。
> また、上記の要望を満たす良い方法は無いですか?
int const num_equals = std::distance( range.first , range.second );
if( num_equals > 0 )
{
double const rand_0to1 = std::rand() / ( RAND_MAX + 1.0 );
iterator i = range.first;
std::advance( i , static_cast< int >( num_equals * rand_0to1 ) );
return i->second;
}
0667デフォルトの名無しさん
NGNG例題の一番左のやつか?
惜しいけど斜めが成り立ってないから魔法陣とはいえない
縦横だけならXORでゼロになってる
地下鉄の吊広告にもなってたね
0668デフォルトの名無しさん
NGNG俺、a - 10 どころか a - 1 でアンダーフローしたことがあるよ。
16bit 時代の話だが。
large model 使ってると、それなりに良く起こるんだ、これが。
今でも double v[10][100000]; なんて変数を使ってると、
一応起きうる話。C++ だと、そんなことはほとんどしないとは
思うが、数値計算系だと、可能性としてはあるかもしれない。
0669デフォルトの名無しさん
NGNG読めば読むほど俺に使えるか自信が・・・orz
0670デフォルトの名無しさん
NGNG簡単なところから使い始めればいい。
今月のCマガを買うなり、稲葉一浩のBoost本を買うなり、
Webで検索するなりしてみ。
Boostはいくつかのライブラリの集まりだから、全部使いこなす必要はまったくないわけで。
0671デフォルトの名無しさん
NGNGプリプロセッサに関する既知の問題
問題 #3
「私はcppを廃止してしまいたい。」 - Bjarne Stroustrup in [Stroustrup]。
解決法
C/C++ プリプロセッサは末永く存続する。
思わず爆笑しちまったよ
0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNGlexical_cast のところでこけます。
error C2679: 二項演算子 '>>' : 型 'boost::date_time::date_names_put<Config,charT,OutputIterator>::string_type'の右オペランドを扱う演算子が見つかりません (または変換できません)。
STLPort無しだと通ります。
どなたかSTLPortで使うときのコツ知ってたら教えてください。
0677デフォルトの名無しさん
NGNG[October, 25] A long-awaited Boost release packed with new libraries,
features and bug fixes is expected to be released by the end of this week.
まだぁ?チン!チン!
0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNGboost.orgに常駐している>>641であった orz
0680デフォルトの名無しさん
NGNG確かどっか書き換えなきゃいけなかったはず
0681デフォルトの名無しさん
NGNGタイムゾーンが JST じゃないんだよ、きっと。
0682デフォルトの名無しさん
NGNG0683デフォルトの名無しさん
NGNG日曜も含むっぽいね。
0684デフォルトの名無しさん
NGNG何度"this weekend"っていう言葉にぬか喜びしたことか・・・
0685デフォルトの名無しさん
NGNGむしろカレンダーが特殊(由来はどこだろう?)なだけで、キリスト教的には日曜は当たり前に週末だし。
最近は週休二日制が普通だから今のカレンダーの表記だと土日が分離しちゃって分かりにくいよね。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGこのまま放流されちゃうのかな?
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNG#include<iostream>
#include<typeinfo>
template <typename T> struct replace_holder{template <typename TYPE> struct replace;};
#define regist_replace_holder(base) \
template<typename T> struct replace_holder< base<T> > \
{ \
template <typename TYPE> struct replace \
{typedef base<TYPE> type;}; \
};
#define replace_temp_arg(from,arg) replace_holder< from >::replace<arg>::type
template <typename T> struct temp1{};
regist_replace_holder(temp1);
int main()
{std::cout << typeid( replace_temp_arg(temp1<int>,double) ).name() << std::endl;}
0691デフォルトの名無しさん
NGNGKeyに対してItemは沢山結び付けたいですが
multimupだと同じKeyに同じItemを追加できてしまう気がします
同じItemは重複させたくないのですがequal_range()して
foreachなりでItemを調べないと無理なんでしょうか・・
0692デフォルトの名無しさん
NGNGstd::map<Key, std::set<Item> >
ぐらいか?
なにを持って"同じItem"というのか知らんが。
0693デフォルトの名無しさん
NGNGサンクス。こんなのに気がつかなかった漏れ・・・
吊ってきます orz
0694デフォルトの名無しさん
NGNGBoost.PPとか使ってもっと多くの引数を受け取れるようにすると面白いかもね。
逆に引数は同じでテンプレートの方を差し替えるなんてのも。
具体的な使用方法は思い浮かばないけどw
0695デフォルトの名無しさん
NGNGマクロは引数を複数取るtemplateと非常に相性悪いので,このままだと拡張性に乏しいでしょう.
あるいは構文が非常に汚くなるか.(これはBoost.PPを使っても同じかと思います)
regist_replace_holderの使い方など制約も多いですし.
Boost1.32.0から,mplのメタ関数クラスの構文が変更されていて,
このうちのlamda & applyがまさにtemplate引数の書き換えを行っているようなので,
これの実装を読み解けばTMPの範囲内で希望の機能が実現できるかも・・・です.
#include<iostream>
#include<typeinfo>
#include<boost/mpl/apply.hpp> // from Boost1.32.0
#include<boost/mpl/lambda.hpp> // from Boost1.32.0
template<class T> struct temp1{};
int main(){
using namespace boost::mpl;
std::cout << typeid( apply<temp1<_1>, int>::type ).name() << std::endl;
}
0696デフォルトの名無しさん
NGNG変更してみたバージョン
template <typename T> struct replace_holder;
template<template<class>class base, class From>
struct replace_holder< base<From> >{
template<class Arg>struct apply{
typedef base<Arg> type; };
};
0697デフォルトの名無しさん
NGNGtemplate-nameとtemplate-argument-listに分解するんですか.これは面白い.
あとはBoost.PPの出番ですね.ちょっと作ってみようかな?
0698デフォルトの名無しさん
NGNG0699697
NGNGrebind<std::vector<int>, std::string>::type
としたときに,vectorの2番目の引数(アロケータ)も一緒に書き換わって欲しいけれど
どうやれば良いのか分からない・・・.
0700デフォルトの名無しさん
NGNGtemplate<template<class, class>class base, class From>
struct replace_holder< base<From, std::allocator<From> > >{
template<class Arg>struct replace{
typedef base<Arg,std::allocator<Arg> > type; };
};
これじゃあかん?
0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNGそのようなことはちょっとソース見たかぎりじゃ確認できなかったのですが。
apply0の仕様が替わったぐらい。
0703デフォルトの名無しさん
NGNGlambdaもapplyも前からあったと思うが、どの辺が変わってるの?
0704695=699
NGNGさすがにそれはadhoc過ぎて・・・.
デフォルト引数を考慮したgenericなrebindは無理なのかも・・・.
>>702
>>703
695については自分が先走りしていただけでした.本当にすいません.
「試しにやってみたら動いちゃった」程度のものを早とちりしたようです.
0705デフォルトの名無しさん
NGNG文字が化けてしまいます
今はSJISですがWEB系のツールなのでEUC、JIS、UNICODE扱いたいです
最低でも SJISとEUCは扱いたいのだけど
馬鹿だからわかんないよ
教えて お兄ちゃん
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNG0708704
NGNG何度もすいません.やはり695は可能なようです.
いずれにせよ公式のドキュメント待ちです.
http://www.mywikinet.com/mpl/mpl_1_32_changelog.html
0709デフォルトの名無しさん
NGNGICU使って変換しる
0710デフォルトの名無しさん
NGNG0711デフォルトの名無しさん
NGNGライブラリによるだろ。
俺はバベルを使ってるが、ICUほどは増えない。
0712デフォルトの名無しさん
NGNGすげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0713デフォルトの名無しさん
NGNG環kry
0715702
NGNGそれとbindは・・・まぁ大丈夫か。
0716703
NGNGいや、だからMPLのlambdaは昔っから使ってる(秀和のBoost本で知った
記憶がある)が・・・どっか変わったの?applyが自動的にlambda化を
行うようになった点てこと?
メタ関数クラスの構文変更は、0引数のヤツの特殊扱いが要らなくなっ
ただけじゃなかったけ。
0717703
NGNG0718デフォルトの名無しさん
NGNGsignalsをシングルスレッド版のlibがつくられません。dllもマルチスレッド版しかつくられません。
bjamの引数は以下のとうおりです。
bjam "-sTOOLS=vc-7_1-stlport"
"-sBUILD=debug release <runtime-link>static/dynamic"
"--prefix=C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7"
install
0719708
NGNGすんません.超大ボケでした.おっしゃるとおりです.
メタ関数クラスでない普通のクラステンプレートのlambda式で,
placeholderを置き換えてくれる機能は以前のバージョンからありました.
0720デフォルトの名無しさん
NGNG<threading>single/multi
……だったと思う。
0721690
NGNGうpしときました。
変更点は
・apply_argのindexを0にした(楽したかった...)
・arg_sizeを追加
・apply_baseを追加
(Arg,From1,From2)(From0,Arg,From2)(From0,From1,Arg)を生成するのがえらい大変だった...orz
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1076074304&res=24&fi=no
0722デフォルトの名無しさん
NGNGコンパイラがいくら対応しててもIDEがフリーズしたら意味ねぇんだよ(▼д▼#)
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNGboost::filesystem::basic_path< typename Char > を実装してくれみたいな
提案が10ヶ月以上前にメーリングリストに提案されていますが、
まだ実装されてないってことは却下なんですかね。
所詮やつらにとっては英語以外アウトオブ眼中ってことでしょうか。
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNGインテリ切るか別のエディタ使わないとダメなんだよね。
0728デフォルトの名無しさん
NGNGなるほど、テンプレートが入り組みすぎててリソース枯渇とか
そんなところか。
0729デフォルトの名無しさん
NGNGこんな未熟なライブラリがboostに入ってるほうが不思議。
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG-------
To run regression tests on the archives, you need to:
1) Grab the archive for your platform from one of the above locations.
2) Grab the latest "regression.py" from
http://www.meta-comm.com/engineering/boost/regression.py
3) Put the archive and "regression.py" in the same directory and invoke
the latter with the following command line:
python regression.py --local=<archive name> --runner=<your runner id>
--toolsets=<your toolsets> [<more options as needed>]
For example,
python regression.py --local=boost_1_32_0.zip --runner=metacomm
--toolsets=msvc,vc7,vc-7_1,cw-8_3 --pjl-toolset=vc-7_1
The results will be automatically uploaded to
ftp://fx.meta-comm.com/boost-regression/boost_1_32_0/.
こういうのに日本人がもっと協力してればもう少し考えてくれるかも知れない
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNGコンストラクタの話だす。
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGbasic_fstream のコンストラクタはファイル名が const char * 決めうちなんだす。
0738デフォルトの名無しさん
NGNG自分でラッパクラスつくりゃいいじゃん。と、言ってみたりする今日この頃。
0739デフォルトの名無しさん
NGNGマリーアントワネットみたいなこというなよ。
0740デフォルトの名無しさん
NGNGそれをやってくれるのがboostですよ。
0741デフォルトの名無しさん
NGNGロケールの初期化とファイルオープンと例外クラス。
0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNG(内部がどっちで実装されてるかにも拠るけど)localeはどうしようもないと思う。
0744デフォルトの名無しさん
NGNGためしにコマンドラインオプションを解析するの作ってみたけど、めちゃ簡単に出来た。
アクションも指定できるから正規表現より断然楽チン。
0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNG断然早いし。
0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNG詳しく
0749デフォルトの名無しさん
NGNGコマンドラインオプション解析ならprogram_options (Boost 1.32.0)もよろしく!
0750デフォルトの名無しさん
NGNGいまさらイラネ・・・とか思ったけど。
usage message 吐いてくれるのはうれしいかも。
0751デフォルトの名無しさん
NGNGpoptでいいわ
0752690
NGNGboost::mpl::copyのdocサンプルがコンパイルできないのですが、仕様変わったのかな?
0753デフォルトの名無しさん
NGNG0754デフォルトの名無しさん
NGNG釣りじゃなくてエスパー探しだろ
0755752
NGNGcopy -> foldにしたらいけました。
0756デフォルトの名無しさん
NGNGtypedef time_zone_names<charT> time_zone_names;
は
typedef time_zone_names_base<charT> time_zone_names;
の間違いだと思うんですが、
皆さんコンパイルできてます?
0757デフォルトの名無しさん
NGNGこれってちゃんとDLLを使用してるのでしょうか?
DynamicLinkできるなら やりかたと確認方法教えて下さい
0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNGで、環境は?
0760757
NGNGWin2K、VC6.0、STLport最新リリース、ICU最新リリース、Boost先週までver
ICUはdependency walkerによるとDLLを使っている感じがしますが
BoostとSTLportはDLLを使ってるように見えませんでした。
0761757
NGNG0762おしえてください
NGNGものをダウンロードして環境設定までして見ました。ここまでは
なんとかいったんですが、コンパイル法(?javaでいうとjavacみ
たいなやつ)とかも分からないし、サンプルプログラムもありません
。まだ初心者なので簡単な言葉でここから何をしたらいいか教えて
ください。
0763デフォルトの名無しさん
NGNGゆっくり寝て、明日の朝本屋に行く。
0764デフォルトの名無しさん
NGNGhttp://www.kumei.ne.jp/c_lang/bcc/index.html
1/2/4章だけ読め
0765デフォルトの名無しさん
NGNGdependency walker で見て DLL を使ってないということは、ホントにスタティック
リンクしてる気が。cl に /MT オプション付けてますか?
0766デフォルトの名無しさん
NGNG拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/
応援するスレはこちら!
http://school4.2ch.net/test/read.cgi/job/1077432387/
最高の会社にするため、みんな頑張ってます!
0767デフォルトの名無しさん
NGNGDynamicLinkするなら/MDですよ残念
0768デフォルトの名無しさん
NGNGちょっとびびった。
0769デフォルトの名無しさん
NGNGソースより長そうだね。
0770質問!
NGNG業務でも。
0771デフォルトの名無しさん
NGNG使い物になるかどうかはおまえ次第
0772デフォルトの名無しさん
NGNG実際に使ったことある?
0773デフォルトの名無しさん
NGNGSpiritはスケーラビリティがものすごく高いから何にでも応用できる。
大規模なものでなくても(というか、大規模なものだとコンパイル時間が半端じゃなく長くなりそう・・・)
ユーザーが入力したテキストの書式をちょっとチェックしたり、
その中からデータを読み取るとかだけでも、
正規表現を使うよりも高機能で柔軟で、読みやすいコードが書ける。
テキストじゃなくてもバイナリに対しても使える。
0775デフォルトの名無しさん
NGNGコンパイル時の負荷が高い、ビルドすらできない場合がある、っつー、困り者。
普通のパーサジェネレータの方がはるかに効率が上。
yacc/lex/bison/flexだってバイナリに対してだって使える。
spiritのメリットは、C++コンパイラだけあれば使える点と、
動的な構文の切り替えが可能な点だけ。
冷静になって考えてみれば、それがほんとにメリットなのかどうか
疑問に思うはず。
何を以ってスケーラビリティが高いといってるのか分からんが、
実際に使ったこともないのに使えるようなこと書くな。
0776デフォルトの名無しさん
NGNG>疑問に思うはず。
本当のメリットはC++のtemplateで実装してあることだ。
俺って超クール?みたいな〜ちょべりば〜
0777デフォルトの名無しさん
NGNGそんなに自分が作ったパーサが出来悪かったんですか?
0778デフォルトの名無しさん
NGNG>spiritのメリットは、C++コンパイラだけあれば使える点
これは結構大きいと思う。ちょっとしたパーサ機能を組み込みたいときとか。
べつにspiritマンセーではないけどさ。
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGsript>>>>>>>>>>>>>>yacc/lex/bison/flex
boost最強!!!!!!!!
みたいなのが出てこない限りは。
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNGRACCより速そうだからいいじゃない?
0785デフォルトの名無しさん
NGNGどのコンパイラ・どのプラットフォームでもソースをそのままmake出来る様になるんだから・・・
0786デフォルトの名無しさん
NGNGクロスプラットフォームならおとなしくRuby使え馬鹿ども。
0787デフォルトの名無しさん
NGNG>STLの代わりとして
なぜそういう認識になるのか分からない。
BoostはSTLの代替ではなく、相互補完の関係にあると思うんだが?
0788デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNG専ら重要だとされているのは保守性だよね。
なるべく高速でないと困るようなアプリケーションでは相応の開発方法があるだろう
けれど、どちらかというとそういうアプリケーションは少数派だし、場合によっては
ネイティブなライブラリとして機能が提供されているでしょう?
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNG0796デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNG日本人はもっと誇りに思うべきだ。
0798デフォルトの名無しさん
NGNG残念だけど、Rubyはフィルタしているんで見えないんだ。
0799デフォルトの名無しさん
NGNGフリー/シェアウェア/商用問わず、ソフトウェアに独自スクリプトを組み込みたい時に
Rubyを使えるのか?Rubyってそんなライブラリあるの?ライセンスは?
0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNG一応、Raccが使える……けど、
Ruby厨(に化けたアンチ)に反応するなよ
0802デフォルトの名無しさん
NGNGいやすまん、純粋な興味だ。Rubyに限らずスクリプト言語は嫌いなんで知らないんだよ。
0803デフォルトの名無しさん
NGNGスクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
スクリプト言語は嫌い
0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNG今は Boost 1.32 が旬だろ。
0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNGだっていつまで待っても出ねぇんだもん。
0808デフォルトの名無しさん
NGNG0809デフォルトの名無しさん
NGNGftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.1.tar.gz
http://www.meta-comm.com/engineering/boost/200411020208/boost_1_32_0.tar.gz
ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.1.tar.gz
http://www.meta-comm.com/engineering/boost/200411020208/boost_1_32_0.zip
ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.1.tar.gz
0810デフォルトの名無しさん
NGNG注目すべき最新の変更及び追加は?
0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNG0813756
NGNGboost/date_time/tz_db_base.hpp 直って無いような気が・・・?
0814デフォルトの名無しさん
NGNGdraft tar ball 置いてあるよ。
0815デフォルトの名無しさん
NGNG正規ってことでは
0816デフォルトの名無しさん
NGNGast_tree_policyのソースを見たところ問答無用で左から右に結合しているようなので
やむを得ず独自のpolicyを書きましたが、
結構長いのでバージョン間の互換性などを考えるとast_parseで出来たほうがうれしいです。
0817デフォルトの名無しさん
NGNGバインドってできないのかな?
//こういう感じで
typedef bind_c<
boost::mpl::plus
,boost::mpl::lambda::_1< boost::mpl::int_<1> >
>::type plus1;
0818デフォルトの名無しさん
NGNGtypedef bind< plus<>, _1, int_<1> > b;
cout<<b::apply<int_<10> >::type::value<<endl;
0819デフォルトの名無しさん
NGNGtemplate<class Int> struct plus1 : public plus<Int, int_<1> >{ };
cout << plus1<int_<10> >::value << endl;
とか
typedef plus<_1, int_<1> > plus1;
cout << apply<plus1, int_<10> >::type::value << endl;
0820817
NGNGthx.
(bind+lambda)の場合はメタ関数クラスになるから直接applyできて、
外部applyは(lambda)と(bind+lambda)の両方okと。
継承版はすっきりしてイイですね。
0821デフォルトの名無しさん
NGNGbindって何に使うの?
0822デフォルトの名無しさん
NGNG(lambda (x y) (+ x y))という加算lambda式(二引数関数)がある時、
((lambda (x y) (+ x y)) 5) → (lambda (y) (+ 5 y))
という引数の部分的なapplyに相当するのがbind。
(bind (lambda (x y) (+ x y)) '1st 5)
0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNGそれでギリシャ語の「ラムダ」に似てるから、ラムダみたいに書けばいいのかと思って
調べてみたらラムダはrじゃなくてlだったということがわかったところだぞ。
そして偶然このスレを見たらlambdaとか書いてあって驚きだよ。
これがシンクロニシティってやつなのか?
0826確かにすれ違いだが
NGNG0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNGてゆうかガンマでそ
0829デフォルトの名無しさん
NGNG>>824 は「筆記体のr」と言っております。
0830デフォルトの名無しさん
NGNG構造体を vectorやmap等に積み込む時ってどうします?
auto_pointer系に詰めて乗せるのが一般的なんですか?
0831デフォルトの名無しさん
NGNGコピーが低コストならそのままコンテナの要素にする。
コピーできないor高コストならboost::shared_ptrとかに乗せる。
0832デフォルトの名無しさん
NGNGnewで生成した場合
そのままコンテナ要素にしたらdeleteがめんどいような・・・
0833デフォルトの名無しさん
NGNGnewで生成したのならboost::shared_ptrとかに乗せたらいいじゃない。
0834デフォルトの名無しさん
NGNGこれをみてちょっと良いなと思ったのですが、
boost辺りで同じ事を出来ないでしょうか?lambdaなどを見てるとなんだか出来そうで。
このライブラリを使えればベストなのですが、なかなか
0835デフォルトの名無しさん
NGNG>boost辺りで同じ事を出来ないでしょうか?
自分で同じこと(スコープ区切るだけ)をすれば良いだけではないですか?
その記事に書いてあること以上の何をお望みですか?
局所関数の簡単な生成?
0836デフォルトの名無しさん
NGNGええと、要するに関数内関数の話です
struct辺りを使ってトリッキーに実現は出来るけど、あんまし読みやすくならないんですよね
これはなかなか可読性も良く、速度も落ちないみたいなんでいいなと
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNGテンプレート引数に使えるのはある?
てゆーか、ありえる?
0839デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNGboost::lambdaで強引に書くくらいかな…
0841デフォルトの名無しさん
NGNG外部リンケージとテンプレートみたいにコンパイラの中の人の仕事を楽にするため?
0842デフォルトの名無しさん
NGNGインライン展開しない/できないときのため
0843デフォルトの名無しさん
NGNGEnumFindWindows(caption) {
int find = 0;
int b = malloc(512);
EnumWindows(lambda __stdcall(hwnd, lparam) {
GetWindowText(hwnd, b, 512);
if (!strcmp(b ,caption))
find = hwnd;
return find ? 0 : 1;
},0);
free(b);
return find;
}
0844デフォルトの名無しさん
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620&res=159&fi=no
インライン化を諦めるならこういうやり方もあるにはあるんですが・・・.
0845デフォルトの名無しさん
NGNGこのスレ的に、EnumWindowsはSTLSoft使って欲しい。
0846デフォルトの名無しさん
NGNGつい最近cppllに出てたもの
ttp://www.tietew.jp/cppll/archive/11286
0847デフォルトの名無しさん
NGNG内部関数から親関数のローカル変数って参照できる?
そういやPascalってどうなんだろ
たしか内部関数作れるんだよね。
0848デフォルトの名無しさん
NGNGただの内部関数はそれこそイディオムが成立するくらい誰でも出来るのです。
このスレ的にはテンプレート化することが重要なのれす。
0849デフォルトの名無しさん
NGNG静的スコープの外側へのリンクを張りながら呼び出すんで。
0850デフォルトの名無しさん
NGNGただの関数ポインタとして扱われるからリンケージが関係なくなるのかな
0851デフォルトの名無しさん
NGNG846さんの方法だと無理です.
local functorなら参照したいローカル変数のポインタを明示的に渡すことで,
一応可能にはなると思います.
0852デフォルトの名無しさん
NGNGfunctorだとテンプレート引数に出来ないというジレンマ
0853デフォルトの名無しさん
NGNG元の関数がメンバ関数だと使えない手法だけど、
ttp://www.tietew.jp/cppll/archive/2507
みたく関数をクラス化してしまうのはどう?
元の関数でローカル変数だったものはメンバ変数にしてしまえば
当然だけどメンバ関数から利用可能だし。
0854デフォルトの名無しさん
NGNGなので844みたいなのを考えてみました.
でも,よく考えれば846さんの方法でもbindすればある程度のことは可能ですね.
#include <string>
#include <algorithm>
#include <iostream>
#include <boost/lambda/bind.hpp>
int main(){
using namespace std; using namespace boost::lambda;
struct local{
static bool match(string const &l, string const &r)
{ return l == r; }
};
string a[] = {"Marc", "Shawn", "George", "Robert"};
string match = "George";
string *found = find_if(a, a + 4, bind(local::match, _1, match));
cout << found - a << endl;
}
0855デフォルトの名無しさん
NGNG関数内関数を作ったつもりだろうけど結局static関数をつくったら意味が無いという罠だけどね
0856デフォルトの名無しさん
NGNG0857デフォルトの名無しさん
NGNGインライン展開されないんじゃない?
0858デフォルトの名無しさん
NGNGinner関数が実行されている時は、
outer関数も実行されている時。
これは関数のスコープ規則によって必ず約束される。
inner関数にグローバルスコープを持たせると、
この制約が破られるから、>>838は駄目。
Lisp/Schemeのようにクロージャで環境問題を解決するか、
局所的なスコープを持った引数を渡されたテンプレートの特殊化は、
局所的なスコープを持つとする必要がある。
member関数の場合、型システムに帰着できるが、
inner関数はスコープ問題になってしまうので、C++は避けているんだろう。
0859デフォルトの名無しさん
NGNGthisがなくていいの? ってことでしょ。
0860デフォルトの名無しさん
NGNG名前のバッティングとかいろいろ言ってるけどそんなの無名namespaceと同じ方法で解決できるし。
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGinline 関数中で定義されたクラスをどうするかっつー問題が。
0863デフォルトの名無しさん
NGNGLispの世界で環境問題って言われている問題を理解してないんでしょう。
関数のスコープとライフタイムの一致は、古典的手続き型言語の一つの特徴。
Pascalがもっとも端的。
0864デフォルトの名無しさん
NGNGどうすべきなのでしょうか?
(VC7.1,boost1.31,boost1.32draft)
boost::filesystem::path full_path("c:\test");
//c:\test error
//c:/test error
0865デフォルトの名無しさん
NGNGttp://www.boost.org/libs/filesystem/doc/portability_guide.htm#name_check-_functions
0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNG"c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test"
"c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test"
"c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test"
"c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test""c:\test"
0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNGclass Hoge{
};
typedef boost::shared_ptr<Hoge*> pHoge;
class Mage : public Hoge{
vector<pHoge> array;
public:
Mage(){
pHoge o = this;
array.push_back( o );
for( int i = 0; i < 3; i++ ){
pHoge buf( new Hoge );
array.push_back( buf );
}
}
~Mage(){
array.clear();
}
}
このように派生元(Hoge)のポインタと
新規に追加する(Hoge)との混合の array を生成すると
array.clear()時に失敗してしまいます
これを解決する方法があれば教えてください
0870デフォルトの名無しさん
NGNGおもしろくない。
0871デフォルトの名無しさん
NGNGそれコンパイル通らねえだろ。
0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNGclass Hoge{
};
typedef boost::shared_ptr<Hoge*> pHoge;
class Mage : public Hoge{
vector<pHoge> array;
public:
Mage(){
pHoge o( this );
array.push_back( o );
for( int i = 0; i < 3; i++ ){
pHoge buf( new Hoge );
array.push_back( buf );
}
}
~Mage(){
array.clear();
}
};
が、>テンプレート引数がHoge*なのもおかしい というのはなぜでしょうか?
Mageに継承されたHoge自身を array の先頭に格納し、
後々 pHoge buf( new Hoge ); のように
別のデータを追加していきたいと考えているのですが…
0874デフォルトの名無しさん
NGNGboost::shared_ptrの使い方をもう一回調べて来い
0875デフォルトの名無しさん
NGNG0876デフォルトの名無しさん
NGNGtypedef boost::shared_ptr<Hoge> pHoge;
ちゃうんかと。
0877デフォルトの名無しさん
NGNGそれはわかっとる。それに、気づくのが遅いよ君。
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNGpath t("c:\\1-2-3",native);
// t /= "4 5 6"; //ERROR
// t /= path("4 5 6"); //ERROR
t /= path("4 5 6",native);//OK
毎回native入力するの面倒な気が...
0880デフォルトの名無しさん
NGNGそんな駄目ライブラリは窓から投げ捨てろ
0881デフォルトの名無しさん
NGNGCUIならいいのー? にゃんにゃん
0882デフォルトの名無しさん
NGNGCUIでも窓なら駄目。
0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG試してないがスペースをエスケープすればいいんでないの?
0885デフォルトの名無しさん
NGNGhttp://www.boost.org/libs/filesystem/doc/path.htm#name_check-_mechanism
path::default_name_check(native);
path t("c:\\1-2-3"); // OK
t /= path("4 5 6"); // OK
0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNG0889デフォルトの名無しさん
NGNGもう、C++でMBCSというのは、完全に無いんだろうな。
0890デフォルトの名無しさん
NGNGC++/CLI
0891デフォルトの名無しさん
NGNGマルチバイト対応もワイドキャラクタ対応も数時間あれば出来るようなことだが
作者にその気がないのでしょうがない。
0892デフォルトの名無しさん
NGNGほんとにやる気ないの?
ttp://article.gmane.org/gmane.comp.lib.boost.devel/113105
0893デフォルトの名無しさん
NGNGどっちでもいいのでは。使いたくないのなら使わなきゃいいだけなのでは
0894デフォルトの名無しさん
NGNGなんで分かってるの?
0895デフォルトの名無しさん
NGNGC++を動かす環境にファイルシステムがあるとは限らないから。
0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNG開くストリームは例えば特定のメモリ領域に名前をつけたものだったり、
極端な話WebページをGETしてもいい。
ファイルシステムとは違う。
0898デフォルトの名無しさん
NGNG0899デフォルトの名無しさん
NGNGへりくつー
0900デフォルトの名無しさん
NGNG無知ー
0901デフォルトの名無しさん
NGNGfreestanding と hosted environment をゴッチャにしてないか?
0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNGテンプレートマクロ集というカテゴリで出すにはふさわしくないだけでしょ。
出すならまた別のライブラリに含める形で。
0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNG> マルチバイトじゃパラメタライズできんから、
君、レベル低すぎ。
0907デフォルトの名無しさん
NGNGoperator[]やfindやsubstrも変更だろ。
場合によっては効率面でopertor[]を
ランダムアクセス禁止にしなければならなくなる。
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNGそもそもbasic_stringと互換性が取れなくなるからiostream他との相性も悪くなる。
だから通常のライブラリにすればいいの。
0910デフォルトの名無しさん
NGNGEUC系
Shift_JIS
とか違う部分をパラメタライズして、
共通部分をまとめればいいじゃない。
> そもそもbasic_stringと互換性が取れなくなるからiostream他との相性も悪くなる。
> だから通常のライブラリにすればいいの。
「だから」って…アフォだろ。
0911デフォルトの名無しさん
NGNGBOOST_STRONG_TYPEDEF(char,mbc);
char str[] = "123";
mbc mbs[] = "123";//error
0912デフォルトの名無しさん
NGNGtypedef unsigned char SJISCHAR;
これならできるんじゃないか?
0913デフォルトの名無しさん
NGNG0914デフォルトの名無しさん
NGNGまさかスルーされてないとは思わなかったよありが�dw
0915デフォルトの名無しさん
NGNGbasic_stringですら既にfindとかはパラメタライズされているような。
0916デフォルトの名無しさん
NGNG何故そのレベルでやろうとするんだ…
char, wchar_t のカテゴリじゃなくて、
char [], wchar_t[] と同じレベルで別カテゴリにあるのがmbcsだよ。
だからbasic_stringじゃなくて、mbc_stringだわな。
interfaceは可能な限りbasic_string風で。
とはいえ今後需要は少なそうだね。
0917デフォルトの名無しさん
NGNGこのへんはネタだと思いたい。
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNGMSはもうWCHAR=2バイトにしちゃったからこれからずっと2バイトなんだろうな。
DCHAR=4バイトとか出してきそうで怖いな。
0920デフォルトの名無しさん
NGNGA targeted release date is November 17.
0921デフォルトの名無しさん
NGNGboostライブラリのコンパイルはpchとか作ってくれないから時間かかるんだよなあ。
0922デフォルトの名無しさん
NGNG良い方法ないっすかね〜?
シリアライズまだ?
0923デフォルトの名無しさん
NGNGdraftから引っ張り出せばいいよ。
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG{
friend T;
private:
static void test()
{std::cout << typeid(T).name() << ":" << typeid(Connection).name()<< std::endl;}
};
struct Friend :public Connection<Friend>
{
using Connection<Friend>::test;
};
private関数をusingしてて思ったんだが、
friendにはテンプレート引数が使えない?
(VC7.1 OK)(VC6 error)(GCC3.4.3 error)
0926925
NGNG{
friend T;
private:
static void test()
{std::cout << typeid(T).name() << ":" << typeid(Connection).name()<< std::endl;}
};
class Enemy
{
static void secret(){ std::cout << "secret!!" << std::endl; }
};
struct Friend :public Connection<Friend,Enemy>
{
using Connection<Friend,Enemy>::test; //friend経由でusingする
using Connection<Friend,Enemy>::secret;//friend経由でusingする
};
Friend::secret();//secret!!
やっぱだめぽ
0927デフォルトの名無しさん
NGNGfriend class T; でもだめか?
0928925
NGNGどーも。
期待通り?VC7.1でもエラーになってくれました。
(template argはfriend指定できないみたい)
class Enemy
{
friend class Friend;//secretに必要
template <class T,class L>struct Connection :public L
{
friend class Friend;//testに必要 ->VC7.1はこっちだけでもOKだった...orz
0929デフォルトの名無しさん
NGNGクラステンプレートにおけるfriend宣言を見ると、
テンプレート・パラメータはfriendクラスそのものには使えないが、friendクラス
のテンプレート・パラメータの方を指定する事ができる。
例
template <typename T>
class Foo {
//いろいろ
};
template <typename T>
class A {
friend class Foo<T>;
};
0930デフォルトの名無しさん
NGNGそこでboostですよ。
#include <boost/mpl/identity.hpp>
template <class T>struct Connection
{
typedef typename T::type X;
friend X;
private:
static void test()
{std::cout << typeid(X).name() << ":" << typeid(Connection).name()<< std::endl;}
};
struct Friend :public Connection< boost::mpl::identity<Friend> >
{
using Connection< boost::mpl::identity<Friend> >::test;
};
0931925=928
NGNGありがとうございました。関数の方はVC7.1とGCC3.4.3でOKでした。
class Friend_Tag;
template <class T,class L>struct Connection;
template <typename T>class Friend;
class Enemy
{
friend class Friend<Friend_Tag>;//GCCの場合必須
static void secret(){ std::cout << "secret!!" << std::endl; }
static const int secret_data = 1000000;
};
template <class T,class L>struct Connection :public L
{
/*C++Primer第3版日本語版P865〜866
クラステンプレートにおけるfriend宣言を見ると、
テンプレート・パラメータはfriendクラスそのものには使えないが、friendクラス
のテンプレート・パラメータの方を指定する事ができる。*/
friend class Friend<T>;
typedef Connection<T,L> connect_type;
private:static void test()
{std::cout << typeid(T).name() << ":" << typeid(Connection).name()<< std::endl;}
static const int test_data = 100000;
};
class Friend_Tag{};//friendクラスのテンプレート・パラメータの方を指定
template <typename T=Friend_Tag>class Friend :public Connection<T,Enemy>
{public:
using connect_type::test; //friend経由でusingする
using connect_type::secret;//friend経由でusingする
//using connect_type::test_data; //friend経由でusingする GCC3.4.3(OK) VC7.1(NG)
//using connect_type::secret_data;//friend経由でusingする GCC3.4.3(OK) VC7.1(NG)
};
0932デフォルトの名無しさん
NGNG君にはC++Templatesをお勧めしよう。
大きな声では言えないが、CHMやPDFはよく探せばどこにでも落ちている。
俺は画面で見るのが嫌なのでAMAZONで買ったが。
しかしこんな名著がなぜ日本語訳化されないのか不思議。
0933デフォルトの名無しさん
NGNGC++ Template Metaprogramming
: Concepts, Tools, and Techniques from Boost and Beyond
http://www.amazon.com/exec/obidos/tg/detail/-/0321227255/
0934デフォルトの名無しさん
NGNGまだだけど内容が偏ってそうなタイトルだな。
0935デフォルトの名無しさん
NGNGhttp://www.boost.org/people/dave_abrahams.htm
http://www.boost.org/people/aleksey_gurtovoy.htm
0936936
NGNGstd::string a(){ return ""; }
int b(){ return 0; }
template< void (*pf)() >
struct A
{ static const int id=0; };
template< class R, R (*pf)() >
struct A<pf>
{ static const int id=1; };
int main()
{
std::cout << A< &a >::id << std::endl;
std::cout << A< &b >::id << std::endl;
return 0;
}
error C2764: 'R' : テンプレート パラメータは部分的特殊化 'A<pf>' では使用されません。
main内をいじくらずにコンパイルをとおすにはどうしたらいいですか?
0937デフォルトの名無しさん
NGNGこれじゃ俺には答えられん。OTL
0938デフォルトの名無しさん
NGNGお前がやりたいのはこれか?
template <typename FP>
struct A;
template <typename R>
struct A<R (*)()>
{enum{id = 0};};
template <>
struct A<void (*)()>
{enum{id = 1};};
0939デフォルトの名無しさん
NGNG936さんは外部リンケージのある関数ポインタをテンプレートの
非型パラメータに取りたいんでしょう.
>>936
ですか?
そのコードはprimary templateとその特殊化で非型パラメータの型が異っていて
(void (*)()とR (*)()),そういう特殊化は許されないです.
なのでmain関数をいじらずにそれを通すのは無理と思います.
見たところ,関数ポインタからその戻り値がvoidかどうかを判別する静的整数値が
欲しいと見受けられますが,その解釈で良いですか?
0940デフォルトの名無しさん
NGNGみあたらないのですが・・・・・
0941936
NGNG以下のソースでとりあえず関数ポインタを単独で渡すことに成功して、いけるかとおもったのですが全部null_tですた
試しに非型パラメータ経由で呼び出したらおちますたorz
template<class T>struct aaa{};
int a(){return 0;}
std::string b(){return "";}
aaa<int> c() { return aaa<int>(); }
struct null_t{};
template<void *p,class R=null_t>struct A
{
typedef null_t result_t;
static const id = 0;
};
template<class R, R (*const pf)()>struct A< pf, R >
{
typedef R result_t;
static const id = 1;
test(){ (*pf)(); }
};
int main()
{
std::cout << typeid(A<&a>::result_t).name() << " " << A<&a>::id << std::endl;
std::cout << typeid(A<&b>::result_t).name() << " " << A<&b>::id << std::endl;
std::cout << typeid(A<&c>::result_t).name() << " " << A<&c>::id << std::endl;
A<&a> a; A<&b> b; A<&c> c;
return 0;
}
0942デフォルトの名無しさん
NGNGそれは無理。
typeofが使える環境ならいいけど。
0943デフォルトの名無しさん
NGNGgcc も version 3から、c++ 対応が強化されてますし。
http://boost.sourceforge.net/regression-logs/
みても、stlport は、いらないかと。
VC がないんだけど、前はあったような気がするのだが。
VC7.1 の場合も標準準拠具合は進んでるし、STLport いらないかも?
でもSTLport のほうが速いのかな。
0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNG942さんの言うようにその要求はまさにtypeofの機能なので厳しいでしょう.
戻り値がvoidかそうでないか等のように,オブジェクトのある程度の種別を
識別するコンパイル時定数を得ることなら以下の手法で出来ますが・・・.
#include <iostream>
struct yes_t{ };
struct no_t{ yes_t padding[256]; };
template<class T> no_t is_void_ret(T (*)());
yes_t is_void_ret(void (*)());
#define IS_VOID_RET(pf) (sizeof(is_void_ret(pf)) == sizeof(yes_t))
void f(){ };
int g(){ return 0; }
int main()
{
std::cout << IS_VOID_RET(&f) << std::endl;
std::cout << IS_VOID_RET(&g) << std::endl;
}
ちなみにこの手法の究極形が,既存のC++の文法のみでtypeofを実現するってヤツなんですけどね.
0946デフォルトの名無しさん
NGNGキタ━━━━(゚∀゚)━━━━!!
ttp://sourceforge.net/project/showfiles.php?group_id=7586
0947デフォルトの名無しさん
NGNG0948Booster達の午後^H^H週末
NGNG0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNGboostのファンクタを使ってみようと思っているのですが、
脳がこんがらがってきました。
boost::shared_ptr< hoge > pointer;
というポインタと、
std::list< boost::weak_ptr< hoge > > container;
というコンテナがあり、
コンテナの中からremove_if()でpointerと同じ値を削除したいのです。
ところが、コンテナの中身がweak_ptrなので、一度lock()しないといけません。
こういう場合、どういうファンクタを書けばいいのでしょうか?
出来ればlambdaを使わず(怖すぎ)、bindやmem_fnだけで書く方法を
教えていただけないでしょうか。
0952951
NGNG0953デフォルトの名無しさん
NGNG0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG解っているがおまえの態度が気に入らない。
0957デフォルトの名無しさん
NGNGどうやらRuby信者の荒らしみたい
0958デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNG具体例プリーズ
0960デフォルトの名無しさん
NGNG試してないけどboost::functionも使ってこんな感じで行けない?
function<int (int)> f= ret<int>(if_(_1==0)[1].else_[_1*f(_1-1)]);
cout<< f(5)<< endl;
0961デフォルトの名無しさん
NGNG0962958
NGNGfunction<int (int)> f= ret<int>
(if_then_else_return(_1==1,1,_1*f(_1-1)));
とかもやってみたけど駄目みたい。(再帰はムリなのかもしれぬ...
0963デフォルトの名無しさん
NGNG半年ぐらいC++から離れたら読めなくならない?
0964デフォルトの名無しさん
NGNGfの呼び出しはbindで包まないとだめだと思うが。
俺の環境ではif_then_elseが使えないから、
function<int (int)> f= bind<int>(var(f), _1);
で、スタックオーバーフローを確認した。
0965デフォルトの名無しさん
NGNGint (*tarai)();
tarai = lambda(x,y,z) {
if (x <= y) return y;
else return tarai(
tarai(x - 1, y, z),
tarai(y - 1, z, x),
tarai(z - 1, x, y));
};
(lambda(x,y,z){ printf("tarai => %d\n",tarai(x,y,z)); })(12,6,0);
}
これをboostで書き直すとどうなるの?
0966デフォルトの名無しさん
NGNG#include <cstdio>
#include "boost/function.hpp"
#include "boost/lambda/lambda.hpp"
#include "boost/lambda/bind.hpp"
#include "boost/lambda/if.hpp"
#include "boost/bind/protect.hpp"
#include "boost/ref.hpp"
int main()
{
boost::function<int (int,int,int)> tarai;
using namespace boost::lambda;
using boost::protect;
using boost::ref;
tarai =
if_then_else_return((_1 <= _2)
, ret<int>(_2)
, bind(ref(tarai)
, (protect(bind(ref(tarai), _1 - 1, _2, _3)))(_1,_2,_3)
, (protect(bind(ref(tarai), _2 - 1, _3, _1)))(_1,_2,_3)
, (protect(bind(ref(tarai), _3 - 1, _1, _2)))(_1,_2,_3)
)
);
std::printf("tarai => %d\n", tarai(12,6,0));
}
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG使わなければいいのでは?
0969デフォルトの名無しさん
NGNG俺そんなの読むのヤだよ。
って実際lambda使ってるやつ見たことないけど。
0970デフォルトの名無しさん
NGNG0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNG「でっきる〜かな、でっきる〜かな♪」
と聞こえてくるんですが。
0974デフォルトの名無しさん
NGNG「さてさて、ふふ〜ん」ってか
0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNGPerlにすらあるのに。
0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNGちょっとドキッとして調べちゃったじゃないかよ
0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNG【C++】template 統合スレ -- Part6
http://pc5.2ch.net/test/read.cgi/tech/1101384692/
レス数が950を超えています。1000を超えると書き込みができなくなります。