[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 22:57 / Filesize : 262 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【C++】template 統合スレ -- Part6



1 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:11:32]
C++ のジェネリックプログラミングの話をしましょう。
以下のスレッドを統合するスレです。
STLスレッド
Part1 pc.2ch.net/tech/kako/1004/10042/1004287394.html
Part2 pc3.2ch.net/tech/kako/1026/10267/1026793823.html

【C++】Boost使い集まれ!
pc3.2ch.net/test/read.cgi/tech/1033830935/ (html化待ち?)

Generic Programming with C++ Template
pc.2ch.net/tech/kako/1008/10085/1008593126.html
【C++】template 統合スレ -- STL/Boost/Loki, etc.
pc2.2ch.net/tech/kako/1037/10377/1037795348.html
【C++】template 統合スレ -- Part2
pc2.2ch.net/test/read.cgi/tech/1047978546/ (html化待ち)
【C++】template 統合スレ -- Part3
pc5.2ch.net/test/read.cgi/tech/1066493064/ (html化待ち)
【C++】template 統合スレ -- Part4
pc5.2ch.net/test/read.cgi/tech/1083550483/ (html化待ち)
【C++】template 統合スレ -- Part5
pc5.2ch.net/test/read.cgi/tech/1091522597/
関連スレ、その他リンクは >>2-5 あたりに。


2 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:12:08]
関連スレ
C++相談室 part37
pc5.2ch.net/test/read.cgi/tech/1098543578/
【C++】STL(Standard Template Library)相談室
pc5.2ch.net/test/read.cgi/tech/1095583235/
BOOSTを語れゴラァ
pc5.2ch.net/test/read.cgi/tech/1091198276/

リンク
STLPort
www.stlport.org/

Boost
www.boost.org/

Loki
freshmeat.net/projects/lokilibrary/
www.geocities.com/rani_sharoni/LokiPort.html

ISO/IEC 14882
Programming languages -- C++
webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
www.kuzbass.ru/docs/isocpp/


3 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:12:30]
boostに関する有名な日本語サイト

・boost info
shinh.skr.jp/boost/

・boost::spiritっちゃえ!
www.c3.club.kyutech.ac.jp/~gridbug/spirit/

・Let's boost
www.kmonos.net/alang/boost/

・Regex
www.s34.co.jp/cpptechdoc/article/regexpp/

・Boostを使おう
www.emaki.minidns.net/Programming/tools/Boost/


4 名前:デフォルトの名無しさん mailto:sage [04/11/25 21:12:51]
参考図書

・テンプレート
C++ Templates
www.amazon.com/exec/obidos/ASIN/0201734842/
Modern C++ Design
www.amazon.co.jp/exec/obidos/ASIN/4894714353/
C++ Template Metaprogramming
www.amazon.co.jp/exec/obidos/ASIN/0321227255/

・Boost関連
Boost C++ Libraryプログラミング
www.amazon.co.jp/exec/obidos/ASIN/4798007862/
The Boost Graph Library
www.amazon.co.jp/exec/obidos/ASIN/0201729148/

・STL
Generic programming―STLによる汎用プログラミング
www.amazon.co.jp/exec/obidos/ASIN/4756134416/
Effective STL
www.amazon.co.jp/exec/obidos/ASIN/4894714108/
STLによるコンポーネントデザイン
www.amazon.co.jp/exec/obidos/ASIN/475613422X/


5 名前:デフォルトの名無しさん mailto:sage [04/11/25 23:45:32]
追加

C++ Template Metaprogramming
: Concepts, Tools, and Techniques from Boost and Beyond
www.amazon.com/exec/obidos/tg/detail/-/0321227255/

Dependancy Inversion Principle
www.objectmentor.com/publications/dip.pdf

6 名前:デフォルトの名無しさん mailto:sage [04/11/26 01:17:17]
>>1
  _n
 ( l    _、_
  \ \ ( <_,` )
   ヽ___ ̄ ̄  )   グッジョブ!!
     /    /

7 名前:デフォルトの名無しさん mailto:sage [04/11/26 19:54:41]
C++相談室に統一すれば良かったのに.....


8 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:07:43]
ここを相談室と統一するのはどうかと思うけどな。


9 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:20:50]
STLスレとBOOSTスレとこのスレを統合すべきだよね。

10 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:24:21]
いやC++相談室とこことSTLスレが統合して(つまり標準)
BOOSTを分けるべきじゃ?
個人的には上のは全部一つのスレでいいとは思うんだけど




11 名前:10 mailto:sage [04/11/26 20:25:30]
おっとここは標準じゃないんだったか


12 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:37:47]
BOOSTはSTLの拡張みたいなものだから同じスレで良いと思う。
そもそもBOOSTなんてただの一ライブラリに過ぎないのにスレをわける必要があるの
だろうか。

13 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:47:05]
MFCやATLでスレたってるじゃん

14 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:49:01]
BOOSTはSTLの拡張みたいなものだから
BOOSTはSTLの拡張みたいなものだから
BOOSTはSTLの拡張みたいなものだから

BOOSTはSTLの拡張みたいなものだから
BOOSTはSTLの拡張みたいなものだから
BOOSTはSTLの拡張みたいなものだから

BOOSTはSTLの拡張みたいなものだから
BOOSTはSTLの拡張みたいなものだから
BOOSTはSTLの拡張みたいなものだから

15 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:57:23]
1には申し訳ないが
ここと【C++】STL(Standard Template Library)相談室はもういらんだろう
以後は話題によって如何に書くべし
BOOSTを語れゴラァ
C++相談室 part37
【初心者歓迎】C/C++室 Ver.12【環境依存OK】


16 名前:デフォルトの名無しさん mailto:sage [04/11/26 20:59:48]
C++スレで質問する初心者はだいたい標準C++及びSTLでの回答を期待してると思うんだ。
だからこれらは一緒にしてもいいと思う。

17 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:01:56]
以前はLokiとかも考慮してここが立ってたのにな。
前みたいにスレタイにBoostやLokiを入れてれば重複スレに置き換わられることも無かったろうに。

18 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:08:14]
Lokiに限定した質問て最近ほとんどないので現状では

BOOSTを語れゴラァ
C++相談室 part37

どっちかに振れば良いと思う
「BOOSTを語れゴラァ」の次スレあたりで
Lokiの名前を加えるといいのではないでしょうか


19 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:11:20]
AssocVectorについて

20 名前:デフォルトの名無しさん [04/11/26 21:15:20]
Loki って使いものになります?業務で。



21 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:15:45]
>「BOOSTを語れゴラァ」の次スレあたりで
>Lokiの名前を加えるといいのではないでしょうか

それはつまり内容的にここのことじゃないか。

22 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:18:32]
標準C++相談室【STL含む】スレと
C++テンプレート相談室【Boost/Loki】スレ
があればいいんだ。
これでスレタイで検索できるから重複も立たないし、
質問する人もわかりやすい。

23 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:19:43]
>>20
あなたには無理です

24 名前:デフォルトの名無しさん [04/11/26 21:24:24]
>>22
いいですね
C++相談室は今のスレが950くらいになったら
次スレの名前として「標準C++相談室【STL含む】」を提案しましょう

で「C++テンプレート相談室【Boost/Loki】スレ」はどうします?


25 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:25:13]
boostってそもそもtemplateじゃないのも多いのに

26 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:25:36]
>>23
誰なら使い物になりますか?

27 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:27:34]
>>25
別にC++非標準ライブラリ相談室でもいいぞ

28 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:33:59]
>>20
実際の開発で Loki 使っている人いる?是非聞きたいなー。

29 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:34:31]
crypto++とかについて話せるスレがやっとできるのか

30 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:36:15]
lib*のC++インターフェースが用意されてない事も多いから
C/C++非標準ライブラリ相談室にしよう。



31 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:39:30]
C/C++非標準ライブラリ相談室【Boost/Lokiなど】

とライブラリ名を入れるのを忘れないようにしよう。
入れないと絶対重複スレ立てる人いるから。

32 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:45:15]
C++アブノーマル相談室

33 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:46:50]
>>31
「C/C++非標準ライブラリ」というと標準以外全部含みそうなので(まぁBoost/Lokiなどといれてるけど)
C/C++環境非依存ライブラリ相談室【Boost/Lokiなど】
C/C++准標準ライブラリ相談室【Boost/Lokiなど】
とかどうでしょうか?


34 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:50:08]
>>33
標準以外全部含んでいいんじゃないの?
専用スレがあったら誘導すればいいんだし。
そのスレタイだと初心者が迷いそう。
そもそもスレタイは初心者が迷わないために工夫するんだし。

35 名前:33 mailto:sage [04/11/26 21:55:10]
>>34
>そもそもスレタイは初心者が迷わないために工夫するんだし。
そうかもしれない

じゃ自案は取り下げて如何を支持します
C/C++非標準ライブラリ相談室【Boost/Lokiなど】


36 名前:デフォルトの名無しさん mailto:sage [04/11/26 21:57:43]
そうすると今後は純粋にtemplateについての質問は
標準スレに回ることになるんですよね?
そこらへんは「柔軟に」ってことで良いのかな?

37 名前:デフォルトの名無しさん mailto:sage [04/11/26 22:00:31]
標準スレだろ

38 名前:デフォルトの名無しさん mailto:sage [04/11/26 22:06:17]
もういまどきテンプレート関数やクラスをC++じゃないなんて
言う奴もいないだろ?

39 名前:デフォルトの名無しさん mailto:sage [04/11/26 22:20:09]
CとC++は分けたほうがいいと思うなぁ…

40 名前:デフォルトの名無しさん mailto:sage [04/11/26 22:27:48]
分けられるとlibpngをC++で使いたい時とか困るよなあ…



41 名前:デフォルトの名無しさん mailto:sage [04/11/26 22:56:58]
標準か非標準かよりも(比較的)汎用か非汎用かの方がスレを分ける際に重要だと思うけど。
MFCがC++スレに混ざってたら、大半の人にとっては無関係な話題が延々繰り返されるわけでうざくてしょうがないが、
boostもLokiもある程度の環境で使えるんだからみんな全く無関係ってほどでもないだろ?


42 名前:デフォルトの名無しさん mailto:sage [04/11/26 22:58:04]
MFCは専用スレが既にあるから問題無いと思うが

43 名前:デフォルトの名無しさん mailto:sage [04/11/26 23:01:11]
>>41
それってポータブルかどうかってことだと思うんだけど
訳は汎用でいいの


44 名前:デフォルトの名無しさん mailto:sage [04/11/26 23:03:32]
>>43
気にするな。いい日本語が思いつかなかっただけだ。

45 名前:デフォルトの名無しさん mailto:sage [04/11/27 00:16:33]
>>41
標準 / 非標準環境非依存 / 非標準環境依存 の3通りだな
...表記長いな


46 名前:デフォルトの名無しさん mailto:sage [04/11/27 17:22:23]
ところで
boost/algorithm/string/replace.hppの
//! Replace all algorithm
...
\return A reference to the modified input
*/
って間違いだよね?replace_allは戻り値voidだし。

47 名前:デフォルトの名無しさん mailto:sage [04/11/27 21:39:17]
コピペしたときに消し忘れたっぽいね。

48 名前:46 mailto:sage [04/11/28 00:02:14]
むしろその方が使いやすいような気がするんだけどなぁ。俺が自分で
作って使っていたreplace_allは名前が同じで引数がまったく同じシグニチャで
戻り値だけが違って変更後の文字列への参照を返してた。

49 名前:デフォルトの名無しさん mailto:sage [04/11/28 00:08:42]
In place modificationはvoidを返すんでいいよ。
プロトタイプ見ただけでin placeであることが分かる。

50 名前:デフォルトの名無しさん mailto:sage [04/11/28 00:14:09]
あぁ、なるほど。そういう考え方の切り口があったのか。
アリガトン。



51 名前:デフォルトの名無しさん mailto:sage [04/12/02 10:34:53]
以下のコードをビルドするとリンカで外部参照未解決というエラーがでます
template<class T> T Test(T t){ return t; }
//template int Test<int>(int);   //明示的に生成
int main(){
  //Test<int>(0);          //普通に使用
  boost::bind(Test<int>, 1);
  return 0;
}
どちらかのコメントをとると上手くいきますが、こういう仕様でしょうか?

52 名前:デフォルトの名無しさん mailto:sage [04/12/02 10:36:13]
>>51 VC6か?

53 名前:デフォルトの名無しさん mailto:sage [04/12/02 10:43:27]
>>52
そうです

54 名前:デフォルトの名無しさん mailto:sage [04/12/02 10:46:17]
捨てるしか

55 名前:デフォルトの名無しさん mailto:sage [04/12/02 11:08:46]
>>54
そうですか。2005まで粘ろうかなぁ。なんて。あははhっは

56 名前:デフォルトの名無しさん mailto:sage [04/12/02 11:18:16]
2005 までは Toolkit とか 2005 Beta とか 2005 Express 使ってりゃいいじゃん
VC6 はさっさと捨てろ

57 名前:デフォルトの名無しさん mailto:sage [04/12/02 12:29:27]
貧乏人は死ね

58 名前:デフォルトの名無しさん mailto:sage [04/12/02 12:58:30]
優越感に浸りたいお年頃

59 名前:デフォルトの名無しさん mailto:sage [04/12/02 13:44:50]
うちは金持ちだけど6.0

60 名前:デフォルトの名無しさん mailto:sage [04/12/02 13:52:18]
ダメじゃん。



61 名前:デフォルトの名無しさん mailto:sage [04/12/03 03:22:13]
>>59
金持ちだけど技術なし?

62 名前:デフォルトの名無しさん [04/12/09 01:13:37]
下がりすぎage

63 名前:デフォルトの名無しさん mailto:sage [04/12/09 01:36:48]
template=天ぷらって?


64 名前:デフォルトの名無しさん mailto:sage [04/12/09 01:39:31]
>>63
10点

65 名前:デフォルトの名無しさん mailto:sage [04/12/09 02:31:21]
10点ならいいじゃん。
オリンピックだって10点満点で評価してるしな。

66 名前:デフォルトの名無しさん mailto:sage [04/12/09 02:37:49]
違う。1000点満点中の10点だ。よく覚えとけ。

67 名前:デフォルトの名無しさん mailto:sage [04/12/09 18:13:18]
boostの質問はここでいいのでしょうか?
以下のようにboost::bindを二重に使うと上手くキャストできません。
二回目のBase&を渡すところで内部でコピーされてスライスされているのでしょうか。
ポインタで渡せば問題ないのですが、参照で保持してくれるようにはできませんか?

struct Base { virtual ~Base() {} };
struct Hoge : public Base { };

void bar ( Base& b ){
  if ( Hoge *p = dynamic_cast<Hoge*>(&b) )
    std::cout << "bar ok" ; //ここへはこない
}

void foo ( Base& b ){
  if ( Hoge *p = dynamic_cast<Hoge*>(&b) )
    std::cout << "foo ok" ;

  boost::bind ( &bar, b )();
}

int main(){
  Hoge hoge;
  boost::bind ( &foo, hoge )();
  return 0;
}


68 名前:デフォルトの名無しさん mailto:sage [04/12/09 18:19:54]
boost::bind ( &foo, boost::ref( hoge ) )();

69 名前:デフォルトの名無しさん mailto:sage [04/12/09 18:26:04]
間違えた
-boost::bind ( &bar, b )();
+boost::bind ( &bar, boost::ref ( b ) )();
-boost::bind ( &foo, hoge )();
+boost::bind ( &foo, boost::ref ( hoge ) )();


70 名前:デフォルトの名無しさん mailto:sage [04/12/09 18:28:55]
bindが引数の型を推論するときにBase &のtop-level referenceを剥いじゃうんですよね・・・



71 名前:デフォルトの名無しさん mailto:sage [04/12/09 18:30:22]
>>69
67の例だとhogeをラップする必要はないですよ.

72 名前:デフォルトの名無しさん mailto:sage [04/12/09 18:36:09]
即答ありがとうございます。上手くキャストされました

73 名前:デフォルトの名無しさん mailto:sage [04/12/12 14:38:59]
listのメンバであるsort関数についてお尋ねしたいのですが、
これの引数であるCompare compというのはどういう物なのでしょうか。

関数オブジェクトやfunctionalの物かと思って色々試してみたのですが、どうにも上手くいきません。

74 名前:デフォルトの名無しさん mailto:sage [04/12/12 14:51:30]
普通に二項の関数オブジェクト

75 名前:73 mailto:sage [04/12/12 15:19:55]
すいません、functionalでもgreaterだけは通りました。
lessやless_equal、greater_equalでは駄目みたいです。

>>74
レスありがとうございます。では私の何かやり方がまずいっぽいです。
どうか添削して頂けないでしょうか。

#include <iostream>
#include <list>
using namespace std;

struct func_object{
bool operator()( const int& lhs, const int& rhs ){
return lhs < rhs;
}
};

int main(){
list<int> list_hage;
list_hage.push_back( 5 );
list_hage.push_back( 1 );
list_hage.push_back( 3 );

list_hage.sort( func_object() ); //error: struct func_objectから、struct std::greater<int>に変換できません(VC6)

//確認用
for( list<int>::iterator it = list_hage.begin(); it != list_hage.end(); ++it ){ cout << (*it) << endl; }
return 0;
}

76 名前:デフォルトの名無しさん mailto:sage [04/12/12 15:41:31]
>>75
コンパイラがまずいんじゃないの?gcc3.4.2では普通に通るぞ。

#include <iostream>
#include <list>

struct func_object {
bool operator()(const int& lhs, const int& rhs) const {
return lhs < rhs;
}
};

int main()
{
std::list<int> list_hage;

list_hage.push_back(5);
list_hage.push_back(1);
list_hage.push_back(3);

list_hage.sort(func_object());

//確認用
for (std::list<int>::const_iterator it = list_hage.begin(); it != list_hage.end(); ++it)
std::cout << *it << std::endl;
}

77 名前:うすげ mailto:sage [04/12/12 15:43:16]
hogeの代わりにhageを使うヤツは嫌い。

78 名前:デフォルトの名無しさん mailto:sage [04/12/12 15:54:32]
だからVC6じゃC++は使えないんだって何度言えば

79 名前:デフォルトの名無しさん mailto:sage [04/12/12 15:56:45]
>>76
確認ありがとうございます。おかげですっきりしました。
勉強中の身ですし、頭からコンパイラのせいだ!とは言いづらく…。

>>77
私も眉毛と生え際の間がフォーフィンガーでして、自嘲の意味で良く使うのですが、配慮が足りずすいません。

80 名前:つる mailto:sage [04/12/12 16:03:40]
>>うすげ
気にするな
個性だ




81 名前:デフォルトの名無しさん mailto:sage [04/12/12 21:56:38]
こんどからusageの替わりにusugeを使おう。

82 名前:デフォルトの名無しさん mailto:sage [04/12/14 23:42:13]
偉大なるstroustrupに敬意を示すため
我々C++プログラマは、むしろ積極的にhageを使っていくべきじゃなかろうか

83 名前:Addicted to C++ ◆nrBjarne.g mailto:sage [04/12/14 23:44:30]
むしろ積極的にトリップにBjarneを入れていくべきではないだろうか。

84 名前:デフォルトの名無しさん mailto:sage [04/12/16 16:49:49]
>>78
意味不明。

85 名前:デフォルトの名無しさん mailto:sage [04/12/16 17:28:50]
つまり
VC++6使ってる奴は貧乏人
っていうことですよ

86 名前:デフォルトの名無しさん mailto:sage [04/12/16 17:38:24]
決して割れに手を出さない分、高貴とも言える

87 名前:デフォルトの名無しさん mailto:sage [04/12/16 18:12:58]
金が無いならvc2005 betaでも使えば良いだろ。

88 名前:デフォルトの名無しさん mailto:sage [04/12/16 19:35:46]
金が無いならVCTKでも使えば良いだろ。

89 名前:デフォルトの名無しさん mailto:sage [04/12/16 21:13:44]
金がないならハンドコンパイルすればよいだろ。

90 名前:デフォルトの名無しさん [04/12/17 11:45:57]
Boost.Spirit見てて思ったんだが、
同じようにSQLクエリをC++で記述できないもんかな。

sql.select( Person.name, Person.sex ).from( Person ).where( Person.age>=20 );

ってな感じで。



91 名前:デフォルトの名無しさん mailto:sage [04/12/17 12:40:12]
>>90
わらった。変態すぎ。

92 名前:デフォルトの名無しさん mailto:sage [04/12/17 13:36:33]
>>90
ちょっと面白そう

93 名前:デフォルトの名無しさん mailto:sage [04/12/17 23:54:26]
>>90
今作ってるオリジナル言語のコンパイラが完成したら
開発に着手する気でいたw

94 名前:デフォルトの名無しさん mailto:sage [04/12/18 13:24:58]
>>90
ttp://www.tietew.jp/cppll/archive/330

95 名前:デフォルトの名無しさん [04/12/25 14:39:04]
T1 と T2 が整数型という前提で sizeof(T1) > sizeof(T2) の時に
T2型の整数をゼロ拡張してT1型の整数に変換するテンプレート関数
はどのように書けばよいでしょうか?

template<class T1, class T2>
T1 zero_ext( const T2& x );


96 名前:デフォルトの名無しさん mailto:sage [04/12/25 16:34:01]
ゼロ拡張?
意味不明。
俺用語を使うな。

97 名前:デフォルトの名無しさん mailto:sage [04/12/25 16:34:07]
>>95
template<class T1, class T2>
T1 zero_ext(const T2& x)
{
return static_cast<unsigned T1>(x);
}


98 名前:デフォルトの名無しさん mailto:sage [04/12/25 17:05:50]
>>96 (´゚c_,゚` ) プッ
www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLD,GGLD:2004-32,GGLD:ja&q=%E3%82%BC%E3%83%AD%E6%8B%A1%E5%BC%B5

99 名前:デフォルトの名無しさん mailto:sage [04/12/25 17:47:33]
ISO C++の4.7.2にあるunsignedのintegral conversionの事でしょうね。
zero expansionってのはアセンブラの世界では良く使うね。

100 名前:デフォルトの名無しさん mailto:sage [04/12/25 17:51:47]
>>97
それだと、T2が符号付きのときに符号拡張されちゃうんじゃないか?








[ 続きを読む ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<262KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef