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

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)