[過去ログ] Boostを語れゴラァ part3 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
455: 2006/12/16(土)03:47 AAS
いや、テンプレートテンプレートパラメタには意味があると思うんだが、
テンプレートテンプレートパラメタ「の」デフォルト引数ってなかなか出てこない発想じゃないだろうか。
ふつうの関数だと
void f(int (*g)(int = 7)){}
不正みたいだし。
456: 2006/12/16(土)03:50 AAS
普通に使いますから。
テンプレートクラスでデフォルト引数が使えるのは(allocatorなど)当たり前のことだし、
テンプレートの引数に、テンプレートクラス使えないのは不便で仕方がない。
457(1): 2006/12/16(土)06:04 AAS
そこで、boost.preprocessorですよ。
458(1): 2006/12/16(土)06:06 AAS
え、VC8でも
hoge<hage<int>>;
みたいのはできないの?
デフォルト引数を定義しなければ使えるってこと?
459: 2006/12/16(土)06:15 AAS
>>458
シンタックスエラー!
460: 2006/12/16(土)06:40 AAS
uho!
461: 2006/12/16(土)06:46 AAS
>>457
preprocessorで何ができると?
462(1): 2006/12/16(土)12:19 AAS
Tはテンプレート引数でコンテナ型です。
typedef typename boost::mpl::if_<boost::is_const<T typename T::const_iterator, typename T::iterator>::type Hoge;
typedef typename boost::mpl::if_<boost::is_const<T typename T::const_pointer, typename T::pointer>::type Hage;
typedef typename boost::mpl::if_<boost::is_const<T typename T::const_reference, typename T::reference>::type Debu;
こういうことをやりたいんですが、もっとシンプルに記述できる方法はないでしょうか?
463: 2006/12/17(日)06:55 AAS
プリプロセッサを使ってもシンプルにはならないだろうし、読みにくくなるだけかと。
そもそも何でそういうことがしたいのか分からない。
渡されたコンテナがconstでなければ、書き換える。
constであれば書き換えないという、奇妙な関数でも書きたいのだろうか。
464(1): 2006/12/17(日)17:28 AAS
>>462
boost::range_result_iterator< std::vector< int > >::type // -> std::vector< int >::iterator
boost::range_result_iterator< const std::vector< int > >::type // -> std::vector< int >::const_iterator
あとは上のように獲得した iterator 型に boost::iterator_[reference|pointer] を適用
465: 2006/12/17(日)23:17 AAS
>>464
うわぁ、Boost.Rangeチョー便利ナリ・・・
boost::sizeとかあるし。sizeof(a) / sizeof(a[0])とかしてたのが馬鹿みたいだ。
いいものを教えてもらった、ありがとう。
466(1): 2006/12/18(月)08:19 AAS
templateもろくに通らないからVC6から2005に切り替えたよ
467: 2006/12/18(月)15:00 AAS
今度はワイド文字ストリームがろくに使えないVC 2005。
468(1): 2006/12/18(月)16:09 AAS
VC 2005 SP1で直る・・・はず・・・だといいな・・・
469: 2006/12/18(月)18:20 AAS
その SP1 では graph library が使えないということらしいが
470: 2006/12/18(月)18:23 AAS
>>468
直ってないような気がする・・・
471: 2006/12/18(月)18:28 AAS
いや、気がするんじゃなくて間違いなく直ってないや。
472: 2006/12/18(月)18:40 AAS
SP1出たんだな
473: 2006/12/18(月)18:46 AAS
STLPort使うとなぜかは知らないがlocale::globalの後でもimbueが効くようだ。
474(1): 2006/12/18(月)21:57 AAS
なあ、boostいじってるC++狂の連中はWebアプリケーションはなにで
書いてるんだ?
俺、JavaもPerlもやる気しねーよ。もっとC++でWebアプリ書くフレーム
ワークとか環境とか色々あってもいいのになあとか思うんだが。
475: 2006/12/18(月)21:59 AAS
boostいじってるC++狂の連中はWebアプリケーションなんてかったるいものは
書かないんじゃないかな
476: 2006/12/18(月)22:00 AAS
Perlは確かに使う気しないがJavaなら別にいい
477: 2006/12/18(月)22:12 AAS
スレ違いだと思うのでURLだけ
外部リンク[html]:ws.apache.org
外部リンク[html]:www.cs.fsu.edu
外部リンク[html]:www.xlsoft.com
478: 2006/12/18(月)22:18 AAS
boost::CppOnRailsができるのを待つか
479: 2006/12/19(火)00:42 AAS
>>474
なんか「柴犬」とか言うtomcatもどきをC++で実装してテストしてるスレがあった希ガス
480: 2006/12/19(火)07:44 AAS
sscanfみたいなのを
正規表現で指定できる関数はあるのでしょうか?
481: 450 2006/12/19(火)08:04 AAS
SP1いれたら、テンプレートテンプレートパラメータのデフォルト引数が使えるようになっていた。
482(1): 2006/12/19(火)14:13 AAS
boost MLに何度か投稿していたら
software関係conferenceの Invitation to submit a paper
(おそらくSPAMの一種だと思う)がくるようになった。
同種のメールは、自分の専門分野の関連領域でもくるのだが
( inviteされるような仕事してねえのに invite ってなんだよ)
software関連のは本当に怪しいのかを見分ける手段がない
なにか見分ける方法ないものか
483(3): 2006/12/19(火)19:52 AAS
すみません、質問させてください
基本型あるいはユーザ定義型の配列の要素数を返す関数を作ろうとしてるんですが
arrayがユーザ定義型の配列であった場合でも
/* @ */の処理がコンパイルされるためエラーになってしまいます
template <typename T> void count(T array[]){
if(boost::is_pod<T>::value){/* @ */}
else{/* A */}}
WEBで調べているとboost::enable_ifで解決できそうな予感がしたのですが
自分には次の例がよく理解できません(特に::type*=0の部分)
これはどういった理屈で動いているんでしょうか
template<typename T> void copy_n( const T* from, int n, T* to,
typename enable_if< is_pod<T> >::type* =0 ){/* 省略 */}
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() ;
}
上下前次1-新書関写板覧索設栞歴
あと 517 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.010s