[過去ログ] Boostを語れゴラァ part3 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
484(1): 2006/12/19(火)20:09 AAS
>>483
enable_ifやdisable_ifは、関数のオーバーロード解決のルールをトリッキーに使っている。
やりたいことを実現する方法はいくつかある。
たとえばこんな方法。
//false以外、すなわちtrueの場合に呼ばれる
template < bool isPod >
struct Count_impl
{ static void do() {/* 1 */} } ;
//特殊化、falseの時に呼ばれる
template < >
struct Count_impl<false>
{ static void do() {/* 2 */} } ;
template < typename T >
void count(T array[])
{
Count_impl<boost::is_pod<T>::value>::do() ;
}
485(1): 2006/12/19(火)20:11 AAS
>>483
enable_if<is_pod<T> >
には、TがPODならtypeメンバがあり、そうでなければtypeメンバがない。
したがって、TがPODでないとき、typename enable_if<is_pod<T> >::typeは
不正な型であり、SFINAE規則によってこの定義が多重定義の考慮から外される。
結果として、TがPODであるときのみ考慮される定義ができたわけだ。
typename enable_if<is_pod<T> >::typeは、このコンパイル時選択の機構のためだけに
使われているので、インタフェースに影響を与えないようにデフォルト値付きの引数になっている。
ポインタを取っているのは簡潔に0で初期化できるようにだろう。
486: 483 2006/12/19(火)21:31 AAS
>>484,485
レス感謝です
おかげさまで理解できました
>>484
こういう風にすればenable_ifなしでいけるんですね
なんとかそのプログラム理解はできても
自分で書けるようになるまでが大変だ・・
とりあえずこれを参考に頑張ってみます
>>485
enable_if< is_pod<T> >::type* =0
ええと、この式の場合だと
組み込み型の場合はtypeメンバが存在するわけですよね
そして組み込み型でない場合はtypeがないから定義自体されない
それだと* =0はなくても大丈夫なんじゃ?と思ったけど
この引数はコンパイル時にifの役割を果たせばよいから省略可能にしたい
省略可能にするには=とデフォルト引数が必要で
typeをtype*にすればどんな場合でも0が代入できる
うーむ、よく考えられてますね
487(1): 2006/12/19(火)22:46 AAS
個人的には返り値型に使うほうが好き>enable_if
488: 2006/12/20(水)01:12 AAS
>>482
自分で「おそらくSPAMの一種だと思う」なら、ちゃんと見分けられてるじゃないか。
489: 2006/12/20(水)03:58 AAS
>>487
コンストラクタだとデフォルト引数として仕掛けるしかないけれどね
逆に引数の数が固定されていて余計なデフォルト引数が仕掛けられない
演算子関数定義だと戻り値型一択になるね
490(1): 2006/12/20(水)20:21 AAS
そもそも483が作ろうとしていると言う配列の要素数を返す関数は、
基本型かユーザ定義型かで分けて一体何をするのか気になる。
配列の要素数と言えばそもそもboost::size()で済むような話ではないのか?
491: 2006/12/20(水)20:32 AAS
>>490
番兵を思いついた。
podな型に対しては、ある値を決めておき、
俺様クラスについては、専用のフラグでも用意しているとか。
492(1): 2006/12/21(木)16:05 AAS
boost開発者向けMLに、自分用に作った
プログラム(boostの既存libの部品の追加してるだけだけど)、
死蔵するのもったいないから
ときどき投稿してたんだけど、
最近、無視されてるっぽい。
493: 2006/12/21(木)17:41 AAS
boost使いはVS2005にSP1はあてるのかい?
494: 2006/12/21(木)17:56 AAS
当たり前だ
495: 2006/12/21(木)21:36 AAS
>>492
何か不満か? ML に晒したんなら勝手に使ってる奴もいるだろう。
使った人が必ずレスポンスを返すわけでもなし。
死蔵にはならずに済んだんだからいいだろ。
496: 2006/12/21(木)22:52 AAS
boost.cppll.jp 落ちてる?
497: 2006/12/21(木)23:29 AAS
ぽいね。俺も繋げない
498: 2006/12/22(金)11:42 AAS
ublasのatlasへのインターフェイスをbackendと表現してるのだが
backendってそういう意味なんだっけ?
499(1): 2006/12/22(金)12:01 AAS
まあCORBAとDCOMではproxy/stubが逆転していることですし
500: 2006/12/22(金)15:15 AAS
>>499
それは主体をどっちに置くかという話から帰着した結果だからあんまり関係ない気が。
501: 2006/12/22(金)23:08 AAS
atlasは下請けや補完をやるわけだから、
ublasから見ればたくさんあるbackendの一つってことでしょ。
502: 2006/12/24(日)12:39 AAS
boostの日本語ドキュメントプロジェクトって2003年で更新止まってるよね
サーバーも落ちてるみたいだけど、誰もメンテナンスしてないの?
503: 2006/12/24(日)17:51 AAS
ublas今試してるんだけど、
VC++2005でboost1.33_1だとsparse_matrixとsparse_vectorは定義されていないと怒られてしまう。
matrix_sparse.hppとvector_sparse.hppはきちんとインクルードしているんだけど、なぜに?
504(1): 2006/12/24(日)18:41 AAS
しかも、mat[i][j]とかで行列の要素にアクセスするとか、lu_factorizeもコンパイルエラー。なんでやろ・・・。
505: 2006/12/24(日)18:49 AAS
エラーメッセージも張らずに日記かよ。いい加減にしろ
506: 2006/12/25(月)13:27 AAS
>>504
mat[i][j]の書き方はできなくなった
今は
mat(i,j)
507: 2006/12/25(月)13:47 AAS
Boost.Python でPythonから呼ぶようにした関数って
Cとして呼ぶよりも処理が遅くなったりするの?
508(5): 2006/12/26(火)16:16 AAS
すみませんが、質問です。
Debian Sarge(EUC-JP)上でBoostのsplitなどをを使いたいのですが、ソースコー
ドの文字列をEUC-JPにするとエラーになってしまいます。
#include <boost/algorithm/string.hpp> を含むソースで
g++-3.4 -finput-charset=EUC-JP -fexec-charset=EUC-JP test05.cpp -o test05
を実行すると、
/usr/include/boost/function/function_base.hpp:23:25: failure to convert EUC-JP to UTF-8
このようなエラーに。
なお、ソースではwchar_t, wstringを使っています。
ソースをUTF-8に、オプションを-finput-charset=UTF-8 にすると動くように
なりますが、やはりこれは不便です。
ソースをEUC-JPのままで使う方法はないでしょうか?
509: 2006/12/26(火)18:55 AAS
age
510(1): 508 2006/12/26(火)19:42 AAS
追記です。
コンパイル時のエラーは、こんな単純なソースでも起こってしまいます。
エラー再現には、ソースにワイド文字リテラルが含まれる必要はありません。
------------------
#include <boost/algorithm/string.hpp>
int main(void)
{
return 0;
}
------------------
g++-3.4 -finput-charset=EUC-JP -fexec-charset=EUC-JP test06.cpp -o test06
↓
/usr/include/boost/function/function_base.hpp:23:25: failure to convert EUC-JP \to UTF-8
EUC-JPではマルチバイト文字を使えということなのかもしれませんが、せっかく
対応しているのだからワイド文字を使いたいのです。
511(1): 2006/12/26(火)19:56 AAS
>>510
boost/ref.hppがLatin-1で書かれているのが問題っぽいな。
ASCIIに直すようにお願いする位しか解決策が思いつかないが。
512(1): 508 2006/12/26(火)20:20 AAS
>>511
ありがとうございます。
ref.hppの17行目でしょうか?そこを削除しても、やはり同じエラーが出ます。
他に気づいたことは、-finput-charset=utf8 などと書いても、「UTF-8に変換
できない」というエラーになることです。大文字ハイフン入りの「UTF-8」以外
受け付けません。
もしかしたらGCC自体が、テンプレートライブラリがUTF-8以外であることに対応
していないのでしょうか?
513(1): 2006/12/26(火)20:38 AAS
>>508
この辺を参考に
外部リンク:search.gmane.org
外部リンク:permalink.gmane.org
>>512
インクルードファイルの中に他にも含まれていないか
チェック。utility/enable_if.hpp とか
$ iconv -l
で使用できる文字コードは分かる
上下前次1-新書関写板覧索設栞歴
あと 488 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.010s