5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:03/10/19 01:04
C++ のジェネリックプログラミングの話をしましょう。
以下のスレッドを統合するスレです。

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 あたりに。

952 :デフォルトの名無しさん:04/05/01 02:17
お前ら、もちつけ。
釣られるやつも釣る奴と同レベルだぞ。
荒らしに脊髄反射してるのも荒らしと大して変わらんことに気づけ。


953 :デフォルトの名無しさん:04/05/01 02:20
&は山椒

954 :デフォルトの名無しさん:04/05/01 02:32
鰻丼に山椒かける?

955 :デフォルトの名無しさん:04/05/01 02:42
かけるよ

template/* ここスペース入れる?俺は入れるんだけど */<...>

956 :デフォルトの名無しさん:04/05/01 04:15
>>954
で、鰻以外の何に山椒かける?

957 :デフォルトの名無しさん:04/05/01 06:10
>>956
麦茶に混ぜると美味しいよ。

958 :デフォルトの名無しさん:04/05/01 12:19
>>955
そこに入れるということは、
int main (int argc, char *argv[]);
とか書くのか?やめてくれ....orz

959 :デフォルトの名無しさん:04/05/01 13:21
>955
俺はスペース一個入れる

>958
誤爆?勘違い?
テンプレートクラス/関数を書く時のスタイルの話だよ?


960 :デフォルトの名無しさん:04/05/01 14:38
>>955
俺は入れないなあ。
理由聞かれても困るけど、少なくとも>>958みたいなことは全然考えてないよ。

961 :デフォルトの名無しさん:04/05/01 14:44
templateと<の間に空白があるってのは、
属性として密接に関連付いた記号なのに分離されてる感じで違和感が・・
>>958もそうだし、あと配列変数名と [ の間が開いたときも同じように気になりそう。

962 :デフォルトの名無しさん:04/05/01 14:47
んじゃ、
for/* ここにはスペース入れる? */(;;)
if/*ここはどうよ?*/()

漏れは、
template< typename HOGE > class AGE {};
for ( ; ; ) {}
if () {}

963 :デフォルトの名無しさん:04/05/01 14:52
俺はこう

template<typename HOGE>
class AGE
{
};

for (i=0; i<10; ++i)
{
}

if (hoge > fuga)
{
}


964 :デフォルトの名無しさん:04/05/01 14:59
吾亦紅

965 :955(いいだしっぺ):04/05/01 16:33
俺はこう

template <typename HOGE>
class AGE {
  ...
public:
  ...
};

for (i = 0; i < 10; ++i) {
  ...
}

if (hoge > fuge) {
  ...
}

int* piyo(const char* foo, double baz)
{
  ...
}

966 :デフォルトの名無しさん:04/05/01 17:03
俺はこう
template<typename HOGE>
class AGE{
・・・
}
;

for(
  i=0;
  i<10;
  ++i
){
・・・
}

if(
  hoge > fuga
){
・・・
}

967 :デフォルトの名無しさん:04/05/01 17:31
そんなことよりBoost本キタ━━━━━(゚∀゚)━━━━━!!
ttp://www.kmonos.net/wlog/38.php#_1245040501

968 :デフォルトの名無しさん:04/05/01 17:43
Let's boostの人?

969 :デフォルトの名無しさん:04/05/01 18:11
>>968
んだ。

Boostのバージョンはいくつかな?

970 :ミナツキ サヤ ◆SAYAC2HJWE :04/05/01 21:10
970

971 :デフォルトの名無しさん:04/05/01 22:01
>>970
どーでもいいが、痛いことやってると思う。

972 :デフォルトの名無しさん:04/05/02 01:36
>>967
K.INABA氏GJ!

973 :デフォルトの名無しさん:04/05/02 02:15
c++相談スレから誘導されました
template<typename T>struct A
{
  char c;

  A(char arg): c(arg){}

  void test()
  {
    cout << c << endl;
  }
};

int main()
{
  A<int> a('1');

  A<string>* p = (A<string>*)(&a);

  p->test();
}
 
のようにクラス内でテンプレート引数を使用しないとして
テンプレート的に違う型のポインタにキャストするのって
動作は保証されてますか?

974 :デフォルトの名無しさん:04/05/02 02:19
>>973
キャスト演算子をstatic_castにすると通らなくなる所から、
コンパイラ内部では別個の種類のオブジェクトのポインタ
と見なされているようだ。で、reinterpret_castにすると通る
が、移植性がないし保証がないだろう。(仕様書ではどの
当たりに出ているかな?)

975 :973:04/05/02 02:24
>>974
そうですか... 残念です
ありがとうございました

976 :デフォルトの名無しさん:04/05/02 02:26
>>973
されない。
templateかどうかは関係なく、別クラスの同じ名前のメソッドを呼べるかという問題だね。

977 :デフォルトの名無しさん:04/05/02 02:32
>>976の回答が微妙にズレてるような気がするのは俺だけ?

978 :デフォルトの名無しさん:04/05/02 02:35
>>975
>>974さんも言ってるけど、C++使いなら、できるだけC型の古い
キャスト演算子の使い方はやめた方がいいよ。その方がバグが
出にくくなるから。

static_cast
const_cast
dynamic_cast
reinterpret_cast

面倒でも使い分けよう。boostにも他にいくつかcastがある。

979 :デフォルトの名無しさん:04/05/02 02:35
>>977
そうだろうな。

980 :デフォルトの名無しさん:04/05/02 02:52
>>973
恐らくそれがだめなのは、後からうっかりクラス内にTを使った
構文を導入してしまう事が多々あるからだろう。

それまで動いていたのに途端にだめになるのはおかしい。それ
なら初めから別の種類のクラスだと見なしておけという事では
ないだろうか。

vector<double>* vp;
vector<int>* p = (vector<int>*)&vp; とやったらだめなのは
直感的にわかるが、後からちょこっとクラス内を変更して、
全く別の所(クラステンプレートのポインタの相互変換)で
エラーが出てきたのでは、発見も遅れそうだ。

981 :デフォルトの名無しさん:04/05/02 03:08
>>973>>980
class A() { void test(); }
class B() { void test(); }
つーことだtてば。

982 :デフォルトの名無しさん:04/05/02 03:09
>>981
あぁ、何書いてんだろ…orz
A()とかの()はいらん。

983 :デフォルトの名無しさん:04/05/02 03:13
>>973
class templateからinstantiationされて出来た各々のクラスは,
あらゆる意味で別の型(クラス)です.
従って,973さんがやろうとしていることはまったく関連の無い違う型への
キャストと同義であり,973さんが期待している動作の保証はまったくありません.

>>974
14.4あたりですかね?

それと976さんの表現で私は良いと思うのですが・・・どうなんでしょうか?

984 :デフォルトの名無しさん:04/05/02 04:30
回りくどい書き方なので分かりにくいかもしれんが
>976の書いてる内容が真理をついてる


985 :デフォルトの名無しさん:04/05/02 14:40
逆に言えば、一般のクラスと同様
クラステンプレートが共通のインターフェイス
class Testable {
virtual void test() = 0;
};
を継承するようにすれば望みどおりのことはできるってこったね。

しかしテンプレートと継承の使い分けで混乱する人は多いようだねぇ

986 :デフォルトの名無しさん:04/05/02 18:00
とりあえず >973 がなぜそんなことをしようとしたのか、やりたいことはなんなのかを
書いた方がより有益なアドバイスが得られるんじゃないかと思う。

987 :デフォルトの名無しさん:04/05/03 01:20
誰か次スレ立てろな
俺はやらないから

988 :デフォルトの名無しさん:04/05/03 04:13
俺 はやらないから

989 :デフォルトの名無しさん:04/05/03 11:22
次スレ立てたよ。
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/

990 :デフォルトの名無しさん:04/05/03 11:32
>989
ご苦労!!

991 :デフォルトの名無しさん:04/05/03 18:33
http://boost.cppll.jp/HEAD/libs/mpl/doc/paper/html/intro.html#intro.whymetaprog
の、"1.3. Why metaprogramming?"で、突然にyaccの話が出てくるんですが、そこの意味/意図が掴めません。

どなたか簡単に補足説明ねがえませんでしょうか

992 :デフォルトの名無しさん:04/05/03 19:27
>>992
1. Introductionの段階でYACCは出てきますが…。2行目の頭。

993 :デフォルトの名無しさん:04/05/03 20:43
>>992
ですね・・。すみません、質問を変えます。
1. We could write programs to interpret the metadata directly.
の、metadataってここでは具体的に何を指しているんでしょうか?


994 :デフォルトの名無しさん:04/05/03 21:11
>>993
それも1のIntroductionに書いてある。太字で。
英語は苦手なんだが、このYACCの例ではEBNFでは無いだろうか。
テンプレート自体とは関係ない気がする。

995 :デフォルトの名無しさん:04/05/03 21:21
>>994
> 英語は苦手なんだが、このYACCの例ではEBNFでは無いだろうか。
ですね。

自分の知りたいことがうまく伝えられなくて本当に申し訳ないんですが、
えーと・・"1.3. Why metaprogramming?"の1.の例では、メタプログラミング
をしない場合にYACCでどう書けって言っているんでしょうか?

私の感覚ではall_permutations関数のシグネチャを適当に変えてnew[]
すりゃ終わりなんですが(遅さは別としてyaccなんていらない)。


996 :デフォルトの名無しさん:04/05/04 10:26
1の前半は、メタプログラミング(template)無しでall_permutationsを書けってことでしょ。
 後半は、メタプログラミング(EBNF)無しでYACC「を」書け、みたいな話。
後半のYACC云々の部分ではall_permutationsは関係無いと思うヨ。

997 :デフォルトの名無しさん:04/05/05 10:49
997。


998 :デフォルトの名無しさん:04/05/05 13:33
誰にも悟られず998get

999 :デフォルトの名無しさん:04/05/05 13:46
999

1000 :デフォルトの名無しさん:04/05/05 13:47
1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

289 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)