【C++】template 統合スレ -- Part3
■ このスレッドは過去ログ倉庫に格納されています
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化待ち)
関連スレ、その他リンクは >>2-5 あたりに。
0002デフォルトの名無しさん
NGNGC++相談室 part23
http://pc2.2ch.net/test/read.cgi/tech/1062690663/
リンク
STLPort
http://www.stlport.org/
boost
http://www.boost.org/
Loki
http://freshmeat.net/projects/lokilibrary/
http://www.geocities.com/rani_sharoni/LokiPort.html
ISO/IEC 14882
Programming languages -- C++
http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
http://www.kuzbass.ru/docs/isocpp/
0003デフォルトの名無しさん
NGNG・boost info
http://user.ecc.u-tokyo.ac.jp/~g940455/wp/boost/
・Hattareme Programming
http://www.dodgson.org/lab/hat/
・Let's boost
http://www.kmonos.net/alang/boost/
・Regex
http://www.s34.co.jp/cpptechdoc/article/regexpp/
・Boostを使おう
http://www.emaki.minidns.net/Programming/tools/Boost/
0004デフォルトの名無しさん
NGNG【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
0005デフォルトの名無しさん
NGNG激しく乙
0006デフォルトの名無しさん
NGNGhttp://www.oonumerics.org/blitz/
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1066546387/
0012デフォルトの名無しさん
NGNG次ぎスレはいらないって・・・・ぷっぷぷぷ
0013デフォルトの名無しさん
NGNG小学生もテンプレートメタプログラミングをする時代になったのか。
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG1.サブセットを取り出す場合明示的なキャストが常に必要となる。
2.slice同士の演算も明示的なキャストが必要であり面倒。
3.sliceをvalarrayに変換する際に巨大な一時的なオブジェクトが
作られ、パフォーマンスが悪い。
結果としてFORTRANの代替用として使うにはあまりにも効率が悪すぎ、
書式も複雑になりすぎる嫌いがある。
本当はこの当たりをもっと煮詰めてから標準化する予定だったらしいが、
std::valarrayの開発者が途中で標準化委員会を抜けてしまったため、ほ
とんどそのまま放置され、未完成のまま世に出てきたと言われている。
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGそんなビット単位でぎちぎちに詰めたいやつはそもそもvectorなんか使わんでしょうに。
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG全部って何を?
俺はvoid*の特殊化がほしいけど
0024デフォルトの名無しさん
NGNGlistじゃなくvectorにして二分木検索とかにしたら早いかなと思ってますが、そんなサンプルなんてどこかに落ちてないですか?
自分でしこしこ作らないと駄目かなぁ?
0025デフォルトの名無しさん
NGNG二分木探索なら STL の <algorihm> で提供されてるぞ。lower_bound, upper_bound
0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNGAssocVector ?
0028デフォルトの名無しさん
NGNGバージョン情報をみても Microsoft Visual C++ .NET ******-***-********-***** としか書いて無いんです。
というのは
http://boost.sourceforge.net/regression-logs/
を見ていて、このコンパイラはどれに当たるのだろうかと?
0029デフォルトの名無しさん
NGNGVC++ 7.1
ちなみに素の VS.NET が VC++ 7.0
0030デフォルトの名無しさん
NGNGあっ、どうもです
0031デフォルトの名無しさん
NGNGとやるとVC7.1が固まってしまう...
再インスコしたら直ります?
0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGコンパイル時でなくて、コード入力時(インテリセンスの問題)だよな?
だったら、たぶん直らない。
自分の環境でも、100%固まる特定の記述が何回かあった。
いつも、そこだけ他のテキストエディタで書いて誤魔化している。
003431
NGNGやはりそうでしたか。
とりあえず、
テキストエディタの設定で
パラメータヒントをOFFにしてみたら
固まる症状はでなくなりました。
ありがとうございました
0035デフォルトの名無しさん
NGNGstd::mapが入ってくるんで一応こっちで聞かせてください!
やりたいことは、拡張子に対応するアイコンのインデックス値を
システムイメージリストから調べて拡張子をそのまま変数に、対応するインデクス値を「値」に、
AnsiString jpg=3;
AnsiString html=6;
(みたいにして構造体に突っ込んでいく)というものなのですが、
教えて頂いたのが以下のコードです。
class IndexMap {
std::map<AnsiString, int> index_map;
public:
int operator()( const AnsiString& ext ) {
if ( index_map.find(ext) == index_map.end() ) {
//indexの取得
index_map[ext] = index;
}
return index_map[ext];
};
んで毎回拡張子を判定してアイコンをリストビューに表示させてた以前のコードがこれ
void __fastcall TForm1::AddListView( const AnsiString DirName , TListItem *Items )
{
AnsiString Ext =ExtractFileExt( DirName );
SHFILEINFO fileinfo;
::SHGetFileInfo( Ext.c_str(), NULL, &fileinfo,
sizeof(fileinfo),SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON );
Items->ImageIndex = fileinfo.iIcon;
}
0036デフォルトの名無しさん
NGNG上手く使い方が見つからないし、どうやって使ったらいいかお手上げ状態で、
我流にやってもエラーばっかり出ます。
[C++ エラー] hoge.cpp(50): E2015 '_fastcall System::operator +(int,const System::Currency &)' と '_fastcall System::operator +(int,const System::Variant &)' の区別が曖昧
おまけにこちらも初めて見るstd::mapがどう動いているのかもわからないし…。
お願いします、この場合、以前のコードをどう組み込んで、
どういうオブジェクト関数の呼び方をするのが正解なんでしょうか。
よければ正解のコードを教えて頂ければ自分であれこれ試して勉強させて頂きます。
0037デフォルトの名無しさん
NGNGclass IndexMap {
std::map<AnsiString, int> index_map;
public:
int operator()( const AnsiString& ext ) {
if ( index_map.find(ext) == index_map.end() ) {
//indexの取得
index_map[ext] = index;
}
return index_map[ext];
}
};
0038デフォルトの名無しさん
NGNGint index = map( ".jpg" );
オブジェクト関数か・・・関数オブジェクトの間違いだと想像しておく。
エラーメッセージの詳細は最低限ソース晒してコンパイラスレ池。
どうせintと変なオブジェクトの加算をしてるが、その変なオブジェクトからVariant、Currencyへの変換が定義されててどっち使えばいいかわから無いってことじゃねぇの?
map はソースか本読め。
0039デフォルトの名無しさん
NGNGこれでいいでそ。スタティックメンバ変数は、どっかに
std::map<AnsiString, int> IndexMap::index_map;
って実体書いといてね。
class IndexMap {
static std::map<AnsiString, int> index_map;
public:
static int Ext2Index(const AnsiString& ext) { ... };
};
void __fastcall TForm1::AddListView( const AnsiString DirName , TListItem *Items )
{
AnsiString Ext =ExtractFileExt( DirName );
Items->ImageIndex = IndexMap::Ext2Index(Ext);
}
0040デフォルトの名無しさん
NGNGアドバイスどうもありがとうございます!
>>39
ああ、ありがとうございます!でも駄目です!
コンパイルエラーは出なくなったんですが、
アプリケーションのくだんの関数実行中にエラーが出てきます。むう。
「モジュール'vcl60.bpl'のアドレス 4013D550でアドレス6F726404に対する読み込み違反がおきました。」
とりあえず.cppの#includeの下に以下を書いたんですが…
自分で書いた怪しいところはコメントアウトしてから実行しました。
class IndexMap {
static std::map<AnsiString, int> index_map;
public:
static int Ext2Index(const AnsiString& ext) {
//SHFILEINFO fileinfo;
//::SHGetFileInfo( ext.c_str(), NULL, &fileinfo,
//sizeof(fileinfo),SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON );
//return fileinfo.iIcon;
};
};
std::map<AnsiString, int> IndexMap::index_map;
あと、基本的にアイコン付きのリストビュー表示を可能な限り早く行うための関数なので、
可能な限りSHGetFileInfo()をの数を減らす、つまり、既出の拡張子は即座にアイコンindex値を
返すのが目的なんです。
なのですでに登録されてる拡張子はすっ飛ばしてindex値を返す処理が必要だと思うんですが、
これってもしかして別関数でファイルを検索してこのIndexMapが呼ばれるたびにSHGetFileInfo()
が実行されちゃうんでしょうか…。
しかし、こういう呼び方するんですね、勉強になりました…。
IndexMap::Ext2Index(Ext);
0041デフォルトの名無しさん
NGNGclass IndexMap
{
typedef std::map<AnsiString, int> map_type;
map_type m_map;
public:
int operator()( const AnsiString& ext ) {
map_type::iterator const bound = m_map.lower_bound( ext );
if ( bound != m_map.end() && !m_map.key_comp()( ext , bound->first ) ) {
return bound->second; // すでに登録されている
}
// 新しく登録
int const index = m_map.size();
m_map.insert( bound , map_type::value_type( ext , index ) );
return index;
}
};
で、インデックスは連番でいいのかな?
0042デフォルトの名無しさん
NGNGいう map はシステムで1個あればよいものだから。シングルトンにするほどのものでも
ないし。
インデックスは連番じゃなくて、
SHFILEINFO fileinfo;
::SHGetFileInfo( ext.c_str(), NULL, &fileinfo,
sizeof(fileinfo),SHGFI_USEFILEATTRIBUTES | SHGFI_ICON | SHGFI_SMALLICON );
return fileinfo.iIcon;
こんな感じで得られる。
ところで、40 はこんなことろでグダグダ質問してないで、C++ とか C を勉強したほうがいいよ。
こうやって人に聞くことには何の意味もないよ。
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGあぁ、ありがとうございます!なにやら光が見えてきましたぁ!ような気がします_| ̄|○
難しいですねー。ありがとうございます。
>>42
先ほど答えて頂いた方ですね。その節はどうもありがとうございます。
参考書も何もなしで、webに転がってる解説だけで来たんですがそろそろ限界です(;´Д`)
プログラムと言えばちょっとperlのcgi改造するくらいとFlashのアクションスク(ry
>>43
あぁ、ご親切どうも。実はあっちで以前に聞いて教えて頂いたコードが難しくて、
延々と検索してもいまいちわからなかったので
関係ありそうなこちらで聞かせて頂いたんです。
0045デフォルトの名無しさん
NGNGシステムで唯一でなければならないならともかくその程度ならstatic使うほうが
後々問題になる確率が高そうだが。
0046デフォルトの名無しさん
NGNGシステムで唯一でなければならないんですよ。
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGだったら IndexMap のインスタンスを static にすればいい。
「拡張子 -> システムアイコンリストのインデックス」が「システムで唯一でなければならない」としても、
class IndexMap のメンバを static にする必要は無い。
0049デフォルトの名無しさん
NGNGどんなクラスの static 変数にするのが妥当だと思います?
典型的なシングルトンパターンで、かつ初期化に関する問題の無いもの
だから、このクラス単体で(何かを) static にしとくのが良いと思うんだけど。。
煽りじゃなくて、単純にどういう方法論から出てくる意見なのか知りたくて
質問しますた。
0050デフォルトの名無しさん
NGNG多分俺ならIndexMapをクラスにせず
class FileSystem
{
static std::map<AnsiString, int> ExtensionToIconIndex;
};
にすると思う。
拡張子とかイメージリストのインデックス、という情報はデータの構造ではなく意味だから。
マップに入れるデータの意味ごとにいちいちクラスを作っていたら爆発するよ。
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNGthx!
でもsandboxか・・・
コピペして使ってみるよ。
0054デフォルトの名無しさん
NGNGstd::vector
boost::scoped_array
0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNGvector<pair<int, int> > pairs;
pairs.push_back(pair<int, int>(1,5));
pairs.push_back(pair<int, int>(2,10));
pairs.push_back(pair<int, int>(3,3));
pairs.push_back(pair<int, int>(4,8));
//second()の小さい順にソート
sort(pairs.begin(), pairs.end(), boost::bind<
less<int, int>(),
boost::bind<pair<int, int>::second, _1>,
boost::bind<pair<int, int>::second, _2> >);
こんなことやってる人居ますか?
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG005958
NGNGstruct cmp{
bool operator ()(const pair<int, int> &a,const pair<int, int> &b){
return a.second<b.second;
}
};
sort(pairs.begin(), pairs.end(),cmp());
0060デフォルトの名無しさん
NGNGファンクタにコンストラクタつけて、lessとgreaterの両方を比較する
オプション付けるとか。
0061デフォルトの名無しさん
NGNG意味わかんない。
0062デフォルトの名無しさん
NGNGstd::sortの第3パラメータにstd::lessとかstd::greaterとかの事前定義の
BinaryPredicateを与えると便利という意味。
std::sort(paris.begin(), pairs.end(), cmp(std::greater<int>())); とかね。
0063デフォルトの名無しさん
NGNGbool> で受けたけどうまくいかない。仕方ないからenumで受けた。
関数オブジェクトって初期化時にパラメタとして渡せないんだっけ?
typedef std::pair<int, int> Pairs;
enum Mode {less, greater};
struct cmp {
cmp(const Mode& p) {
if (p == greater) m = greater;
else m = less;
}
bool operator()(const Pairs& a, const Pairs& b) const {
return a.second < b.second;
}
private:
Mode m;
};
0064デフォルトの名無しさん
NGNGstd::ostream& operator<<(std::ostream& os, const Pairs& p)
{
os << p.first << ' ' << p.second;
return os;
}
int main()
{
std::vector<Pairs> pairs;
pairs.push_back(Pairs(1,5));
pairs.push_back(Pairs(2,10));
pairs.push_back(Pairs(3,3));
pairs.push_back(Pairs(4,8));
//second()の小さい順にソート
std::sort(pairs.begin(), pairs.end(), cmp(greater));
std::copy(pairs.begin(), pairs.end(), std::ostream_iterator<Pairs>(std::cout, "\n"));
}
0065デフォルトの名無しさん
NGNGstruct cmp {
cmp(const Mode& p) {
if (p == greater) m = greater;
else m = less;
}
bool operator()(const Pairs& a, const Pairs& b) const {
return (m == less) ? a.second < b.second : a.second > b.second;
}
private:
Mode m;
};
006658
NGNGtemplate <class Fun>
struct cmp2nd_t {
cmp2nd_t(Fun f):fun(f){}
template <class T,class U>
bool operator()(const T& a, const U& b) const {
return fun(a.second,b.second);
}
private:
Func fun;
};
template <class Fun>
inline cmp2nd_t cmp2nd(Fun fun){
return cmp2nd_t(fun);
}
sort(p.begin(),p.end(),cmp2nd(std::greater<int>()));
試してないからコンパイル出来ないかも
006758
NGNGinline cmp2nd_t<Fun> cmp2nd(Fun fun){
return cmp2nd_t<Fun>(fun);
}
0068デフォルトの名無しさん
NGNGすげぇ、通りました。ありがとうございます!
関数オブジェクトを関数ポインタとして持ってしまうのかな?
std::greaterとstd::lessの二種類でソートしてみると、
デバッグで追いかけるとそれぞれの2項関数オブジェクトの
cmp2nd_tの実体が作られ、それぞれを別個にCALLしていま
した。最適化によってstructの中身が分解されたみたいです。
(Borland-C++ 5.6.4)
それにしても標準の二項述語をいきなりtemplateで受けるとは
恐れ入りました。もっと精進します。
006956
NGNG//secondの小さい順にソート
sort(pairs.begin(), pairs.end(), boost::bind(
less<int, int>(),
boost::bind(&pair<int, int>::second, _1),
boost::bind(&pair<int, int>::second, _2)));
vc7.1で通りました。
0070デフォルトの名無しさん
NGNGstd::ostream& operator<<(std::ostream& os, const Pairs& p)
{
os << p.first << ' ' << p.second;
return os;
}
std::copy(pairs.begin(), pairs.end(), std::ostream_iterator<Pairs>(std::cout, "\n"));
このコードBCCでは通るけど、VC7.1、gcc3.1.1(MinGW)では通らねーな。
std::coutなどに<<を食わせるのと、std::ostream_iteratorに食わせるのでは
何が違うのかな。
0071デフォルトの名無しさん
NGNGvc7.1の場合、内部的には
basic_ostream<char,char_traits<char> >* myos = &cout;
*myos << pairs[?];
こんな事やっているだけなのになんでだろう
コンパイル順序が関係してるとしか思えなのだがわからない。
0072デフォルトの名無しさん
NGNG不思議だよねえ。でも多分標準準拠度は
VC7.1>gcc3.3.1>BCCだから、BCCが甘いだけなのか、
BCCはSTLPortを標準搭載だからVC7.1やgccにSTLPortを
入れたら通るのか、これは実験の余地がある。
丁度STLPort4.6が出た所だし試してみるか。
0073デフォルトの名無しさん
NGNGよろしくお願いします。・・・・。
\(*⌒0⌒)bがんばって♪
0074デフォルトの名無しさん
NGNGでもさ、STLPortのビルドって難しいので有名なんだよね。
いまちょっとMinGWでやってみたら「コマンドラインが違います」とか
4連発で出てきやがった。cppllで聞いてみるか。バカにされるか
相手にされないかのどちらかだろうな。
0075デフォルトの名無しさん
NGNGVC7.1+STLportのiostreamでどうやってビルドすればいいんだろ?
オプションとしてmsvc-stlportとvc7.1ってのがあるんだけど
どちら選べばうまくいくんだろ
0076デフォルトの名無しさん
NGNGnamespace が鍵のようだ。
0077デフォルトの名無しさん
NGNGnamespace std
{
std::ostream& operator << (std::ostream& out, const std::pair<int,int>& p)
{
out<<p.first<<' '<<p.second;
return out;
}
}
ほんとだべ。
♪ルンルン♪o(^0^o)♪~(o^0^)o ~♪♪~o(^0^o)~♪(o^0^)o~♪ランラン♪
でも一回目試したときはうまくいかなかったよう気がしたんだけどな。
やり方がわるかったのか。
>>72にも早く教えてやらねばー
やっぱり、まだvc7.1の最強伝説は崩れなくてよかった。www
0078デフォルトの名無しさん
NGNGvc7.1持ってないんだけどさ、
・非const参照に一時オブジェクトがバインドされる
・メンバ関数へのポインタが & 無しで取れる
とか、「コンパイルが通ってしまう」系のバグも直ってるの?
0079デフォルトの名無しさん
NGNG直ってない。
>・非const参照に一時オブジェクトがバインドされる
warningにはなる。
>・メンバ関数へのポインタが & 無しで取れる
単純なメンバ関数ポインタなら何も言わずに通るが、特定の状況では&付きの記述が必要。
(ただ、これはこれで便利なんだよな。)
0080デフォルトの名無しさん
NGNGそれじゃ解決して無いだろ。
0081デフォルトの名無しさん
NGNG名前のルックアップが出来ないためだと思われる。
もし二個目の引数がstd::pairじゃなく独自のものだったらちゃんとなると思う。
名前のルックアップ(Keonig ルックアップとも呼ばれる)とは、
パラメータクラスに関係のある非メンバ関数を
public インタフェースのものと拡大解釈することにより、名前の修飾の省くことをいう。
0082デフォルトの名無しさん
NGNGstd::cout << pairs[0] << "\n";
// std::copy(pairs.begin(), pairs.end(), std::ostream_iterator<Pairs>(std::cout, "\n"));
上がオーバーロード有効で下がオーバーロード無効なのが問題なので、
「名前のルックアップが出来ない」わけじゃないと思う。
0083デフォルトの名無しさん
NGNG72です。
おわっ、本当だ。通る。
operator<<にstd::pairを渡すとこういう罠があったとは・・・・・
>>82
そうなんですよ。俺も同じ事をやってみたら上はちゃんと
通るので、??と頭をかしげていました。std::ostreamクラス
のfriendとして<<を定義できれば問題もなくなるかも・・・って
そういう問題じゃないな。
Effective STLのP176で、boost::shared_ptrのlessをstdの中
に入れている例があるが、今回もこれと同じようなケースかいな。
0084デフォルトの名無しさん
NGNGそれは特殊化を同じ名前空間で行う必要があるからで、今回の件とは別だと思います。
008678
NGNG0087デフォルトの名無しさん
NGNGいや、バグじゃないような気がします。
なんか、プログラミング言語C++第3版の名前空間の名前の照合というところで(p.224)
関数は呼び出しのスコープ(いつものとおり)とすべての引数の名前空間(各引数のクラス、基底クラスを含む)から
探索され、見付かったすべての関数の中で通常の多重定義解決が行われる。
ゆえに、名前空間内のクラスからは宣言でもしない限りグローバルなスコープが存在しないのが
正しい解釈なのではないのでしょうか違いますかね?
英語よめんからこんな解釈しか出来なくすみません
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG14.6.4 -1-
"In resolving dependent names, names from the following sources are considered:
・Declarations that are visible at the point of definition of the template.
・Declarations from namespaces associated with the types of the function arguments
both from the instantiation context and from the definition context."
ということで、
"Dependent name"(テンプレート引数に依存した識別子およびoperator)の解決には以下のものが考慮される。
・テンプレート定義の時点で可視となる宣言
・関数引数の型に関連するnamespace中で定義時および実体化時両方のコンテキストの宣言
>>70の例では、 operator<< の解決に
・ostream_iterator::operator= の定義時で可視な operator<<
・namespace std の中の operator<<
が使われることになり、 ::operator<< は見つからない。
つまり、typedefの属するnamespaceは引数に関連しているとはみなされず、
引数に依存した参照が、見た目から期待される範囲と異なることがあるので注意が必要ってわけですよ。
0091デフォルトの名無しさん
NGNG70です。わざわざ探して下さってありがとうございました。
namespace stdの中に入れる小技も教えて頂きました。
さらなるSTLの使用拡大に向けて社内でも勉強会などで
どしどし洗脳していきます。車輪の再発明は避けたいし。
009287
NGNGこれからはSTLでグローバルなオーバーロード関数を使いたいときははstd空間でぐぐらなきゃ。
0093デフォルトの名無しさん
NGNG落とし穴っつーか・・・常識だが?
0095デフォルトの名無しさん
NGNGこんな多重定義をしてはならんと思うのは漏れだけ?
0096デフォルトの名無しさん
NGNGではどうすればいいと?
0097デフォルトの名無しさん
NGNG少なくともひとつの、「自分で定義した」型に依存させる
例えば、
class My_pair : private std::pair<int, int>{/* ... */};
std::ostream &operator<<(std::ostream &, const My_pair &);
std名前空間の引数しか取らない演算子はstdの実装者のみ定義して良いような気がする。
009987
NGNGprivate継承だったのね
010087
NGNGあ、勘違いしまくり My_pairのスコープがoperator<<と同じじゃねーか。
もう、−−−だめだめですね。
0101デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています