トップページ⇒tech
1001コメント388KB

【C++】template 統合スレ -- STL/Boost/Loki, etc.

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
C++ のジェネリックプログラミングの話をしましょう。
以下のスレッドを統合するスレです。

STLスレッド
Part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
Part2 http://pc3.2ch.net/test/read.cgi/tech/1026793823/

【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/

Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html

関連スレ、その他リンクは >>2-5 あたりに。
0970デフォルトの名無しさんNGNG
>>969

>>945
を、よめ!!!!!!!!!

ちなみにほかのコンパイラーなら
明示的の指定はいらん
0971デフォルトの名無しさんNGNG
>>963
そういう使い方ならstatic関数にすればいいやん
B::hage(); みたいに
0972デフォルトの名無しさんNGNG
>>970

945の意味するところが『いずれテンパラはある一つの型に決めます』ってなら
<T>の部分を明示するのは抵抗ないだろうけどね。
テンパラになる型が最終的に複数出てくる場合はどうだろう。
と思って957→958という流れになったわけだが
0973デフォルトの名無しさんNGNG
staticにしたらこんなのが通らん

#include<cstdio>

//#define STATIC__
struct FuncOperator
{
#ifdef STATIC__
static void operator () (){ puts("static operator"); }
#else
void operator () (){ puts("Non static operator"); }
#endif
};

int main(){

#ifdef STATIC__

FuncOperator::operator ()();
#else
FuncOperator()();

#endif

return 0;
}
0974デフォルトの名無しさんNGNG
staticなオペレータって蟻なのか?
0975デフォルトの名無しさんNGNG
>>974

為し
0976945NGNG
>>958さん、ありがとうございます。たしかにうまくいきますね。
で、えぇと……実はHoge()はあるクラスのメンバ関数なんですが、
この場合はどうしたらいいんでしょう?^^;

条件が後出しになって申し訳ありません。詳しく状況を言いますね。
まず、バイナリの入出力を簡便にしてくれるクラスが欲しいのです。
標準だと、こうなりますよね。

ifstream ifs("piyo.dat",ios::binary);
int n;
ifs.read(reinterpret_cast<char*>(&n),sizeof(int));
vector<int> v(n);
ifs.read(reinterpret_cast<char*>(&v[0]),sizeof(int)*n);

これだとあまりにも面倒なのです。不要な指定が多すぎて。

CReadFile rf("piyo.dat");
int n;
rf >> n;
vector<int> v(n);
rf >> v

こういう感じですっきり指定できるラッパークラスを作りたいのです。
出力の方も、同じ要領でやりたいと思ってます。
これで、intだけを入出力したいわけじゃないから、templateで、
ということなんです。
で、VC6固有の(ですよね?)templateヘタレ解析に悩まされてるわけです。
そういうわけですので、>>960さんみたいなやり方は、クラス使用者の
負担になりますので、あんまり意味がないわけです。
>>958さんのやり方みたく、多少機種依存の部分があっても、なんとか
隠蔽できればいいんですけど……。
0977デフォルトの名無しさんNGNG
して、次スレの方は?
0978デフォルトの名無しさんNGNG
>>976
template <class T> void hoge(const T &);
を用意しなければいいのでは

つまり
void hoge(int);//unsigned int,float,なども用意する
template <class T> void hoge(const vector<T> &);

でどうでしょう? あんまり無条件でバイナリ保存できる型なんてそうそうないでしょ?
逆に安全性の面から用意されていないと入出力できないようにしたほうが良いとおもわれ
0979デフォルトの名無しさんNGNG
reinterpret_cast<?>(?)のなにがいやぁーなの
もしながくていやとかぬかしてんのそれなら(char*)キャスト使えば
もし、それでもかっこ悪いとか言うんなら自分でvector<T>専用をつくれば

template<typename T>char* Cast(std::vector<T>& tt)
{return reinterpret_cast<char*>(&tt[0]); }

こんな感じに。
さらにintとunsigned charを使い分けたいなんて我侭もあるんなら

union bit{
int i;
unsigned char bitn[4];
};
std::vector<bit>これで読み込ませればint、
unsigned charの使い分けが一回の作業で実現できよう。
とにかくreinterpret_castぐらいでクラスなんて作ってられない


0980デフォルトの名無しさんNGNG
#define scast static_cast
#define rcast reinterpret_cast
#define ccast const_cast
#define dcast dynamic_cast
0981デフォルトの名無しさんNGNG
template <class T,class U> T scast(const U &u)
{ return static_cast<T>(u); }
0982デフォルトの名無しさんNGNG
>>980
それをやるならここでは、こうでしょ。。
#define Cast(M) reinterpret_cast<char*>(M)
0983デフォルトの名無しさんNGNG
>>981
いみない。結局明示的に指定しなくちゃならんでしょ
0984デフォルトの名無しさんNGNG
http://www.tietew.jp/cppll/archive/1071
キャスト
0985デフォルトの名無しさんNGNG
>>982
char * 型以外に使えないじゃん。
0986デフォルトの名無しさんNGNG
ねえ、早く!
0987スレタイはこれでNGNG
template<typename STL,Boost,Loki,etc>class part2
0988デフォルトの名無しさんNGNG
>>987
<> は化けるのでは?
0989デフォルトの名無しさんNGNG
一応新スレ立てときました。

【C++】template 統合スレ -- Part2
http://pc2.2ch.net/test/read.cgi/tech/1047978546/
0990 NGNG
〈〉←これで代用という手がある。
0991デフォルトの名無しさんNGNG
777?
0992デフォルトの名無しさんNGNG
この板では1000ゲットは興味なしですか?
0993デフォルトの名無しさんNGNG
ぬるぽがこのスレに興味を持ったようです。

  ∧_∧
 ( ´∀`)< ぬるぽ
0994デフォルトの名無しさんNGNG
  ∧_∧
 ( ´∀`)< ぼくぬるぽ
0995デフォルトの名無しさんNGNG
もうすぐか…
0996デフォルトの名無しさんNGNG
なにが?
0997デフォルトの名無しさんNGNG
>>996
1000が
0998デフォルトの名無しさんNGNG
 
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
そんなバカなやり取りしてる間に1000げt
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。