[過去ログ] Boostを語れゴラァ part3 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
140: 2006/10/19(木)00:49 AAS
Win32だとInterlockedExchange()あたり使ってるんじゃなかったか。
141: 2006/10/19(木)01:43 AAS
>>138 つ boost/detail/sp_counted_base.hpp
142(1): 2006/10/19(木)03:24 AAS
>>133
VC8+boost1.35で試したらちゃんと動いたけど
使ってるコンパイラとboostのバージョンは?
143: 133 2006/10/19(木)09:30 AAS
>>133
>>142
VC2003 + boost 1.33.1
です
とりあえずboostのバージョンあげてきます
144(1): 133 2006/10/19(木)09:34 AAS
外部リンク[php]:sourceforge.net
boost1.35なんてないよ
145: 2006/10/19(木)11:14 AAS
>>144
CVSの最新版が1.35
146: 2006/10/19(木)11:36 AAS
>133
out = 2.236068
g++(mingw3.4.5)+boost1.33.1 でも問題ないようにみえます。
147: 2006/10/19(木)11:43 AAS
コンパイラか
148: 2006/10/19(木)11:46 AAS
>>133
VC8+boost1.33.1でもちゃんと動くね
149: 2006/10/19(木)16:25 AAS
>>133
VC2003で試したら落ちたのでアセンブリ出力を調べてみた。
function1<float, ublas::vector<float> > norm_2Functor = &ublas::norm_2<ublas::vector<float> >;
and eax,00402fd0 ; ここがおかしい。なんでANDやねん...(00402fd0はnorm_2のアドレス)
push eax ; VC8では2行あわせてpush 00402fd0だけになっている
lea ecx,dword ptr [ebp-3c]
call 00403040
mov byte ptr [ebp-04],01
で、norm_2Functorの宣言をこうしたらとりあえず動いた。
function1<float, ublas::vector<float> > norm_2Functor(&ublas::norm_2<ublas::vector<float> >);
push +00 ; この00は何なんだろう…
push 00402fd0
lea ecx,dword ptr [ebp-3c]
call 00403040
mov byte ptr [ebp-04],01
よくわからないpush 00がとても不安だけど…(VC8ではpushはひとつだけ)
150(1): 2006/10/20(金)21:04 AAS
VS2003ではfunction1を初期化
norm_2Functor(&ublas::norm_2<ublas::vector<float> >);
でしか呼べないのね。
objectの意味ねえ
151(1): 2006/10/20(金)21:49 AAS
>>150
function1<float, ublas::vector<float> > norm_2Functor(NULL);
で宣言しておいてswap技法
function1<float, ublas::vector<float> >(&ublas::norm_2<ublas::vector<float> >).swap(norm_2Functor);
で実際の関数を代入とか…
ヤッテランネ(ノ`□´)ノ⌒┻━┻
152(1): 151 2006/10/20(金)21:52 AAS
メンバ関数のswapがないから
swap(norm_2Functor, function1<float, ublas::vector<float> >(&ublas::norm_2<ublas::vector<float> >));
でないと無理か
そもそもできるかどうか知らんけど
153: 2006/10/20(金)22:03 AAS
腐ったコンパイラでなんとかしようという努力は不毛だぜ
154(2): 2006/10/20(金)22:38 AAS
>>152
そもそも一時オブジェクトをswapの引数にはできん
155(1): 2006/10/20(金)23:17 AAS
>>154
--->?swap技法?
156: 2006/10/21(土)00:24 AAS
中国人は帰れよ
157: 2006/10/21(土)00:43 AAS
>>155
意味不明
158(3): 2006/10/21(土)00:43 AAS
>>154
vectorが確保するメモリを要素数ぴったりに合わせるテクニックで
x.swap(std::vector<T>(x));
ってのがあったと思うけど、これもダメなの?
159(1): 2006/10/21(土)00:46 AAS
一時オブジェクトをswapの引数にするのは何も問題ない(ちゃんとしたコンパイラなら)
160: 2006/10/21(土)00:50 AAS
constでない参照引数に一時オブジェクトはダメじゃなかったっけ?
161: 2006/10/21(土)01:01 AAS
>>158
VC++2003で警告レベルを最高にするとwarningになるな。
162(1): 2006/10/21(土)01:27 AAS
23.1 Container requirementsによればa.swap(b)とswap(a,b)は同じで、
25.2.2 Swapによれば
template<class T> void swap(T& a, T& b);
1 Requires: Type T is Assignable.
とあるから、できないんじゃね?
と思ってx.swap(std::vector<T>(x));とやったらVC++2005でエラーになった。
と思ったらstd::vector<int>(x).swap(x);は通った。
何じゃこりゃ。
163: 2006/10/21(土)02:05 AAS
>>158
swap技法はstd::vector<T>(x).swap(x);じゃない?
164: 2006/10/21(土)07:43 AAS
>>162
template<class T> void swap(T& a, T& b);
はaもbも非const参照だから、一時オブジェクトを受け付けない。
std::vector<int>(x).swap(x);は、
std::vector<int>(x)が一時オブジェクトだが非constなので、非constなメンバ関数を呼べてしまう。
165: 2006/10/21(土)08:54 AAS
>>158
お前何にもわかってないのな
>>159
馬鹿確定
166: 2006/10/21(土)10:01 AAS
あ、一時オブジェクトに対して非constメンバを呼ぶのはいいのか。
167(4): [haskell厨] 2006/10/21(土)21:13 AAS
int add(int a,int b){return a+b;} があるとして、
boost::function<int (int,int)> f = add; はコンパイルできるわけですが、
boost::function<boost::function<int,int> (int)> g = add; のようなことがしたい場合はどうし
たらよいでしょうか?addを、int->int->int ではなく int-> (int->int) として扱いたいというか。
gに、あとで(addの)第一引数を渡して、boost::function<int,int>型の関数オブジェクトを得て、
更にその後で(addの)第二引数を渡し、最終結果を得たいという感じです。
168: 167 2006/10/21(土)21:20 AAS
fをgに変換する方法でも結構です。
よろしくおながいします
169(1): 2006/10/21(土)21:44 AAS
>>167
どうしてもその変換をしないと駄目?
第一引数が既にあるならそれを部分適用することは簡単なんだが。
上下前次1-新書関写板覧索設栞歴
あと 832 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.015s