【C++】template 統合スレ -- Part5
レス数が900を超えています。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 あたりに。
0809デフォルトの名無しさん
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デフォルトの名無しさん
NGNGレス数が900を超えています。1000を超えると表示できなくなるよ。