ページ 11

typedefテンプレート

Posted: 2009年5月17日(日) 14:03
by kazuoni
お邪魔します。
以下に記述するtypedefを用いた構造体にテンプレートを使用したいのですが、
コンパイルエラーを避けるためには
どのように記述するのが一番なんでしょうか?

msdn コンパイラ エラー C2823
ttp://msdn.microsoft.com/ja-jp/library/w191kaf4.aspx

コードを引用したのを以下に示します。
template<class T>
typedef struct x {
   T i;   // C2823 can't use T, specify data type and delete template
   int i;   // OK
} x1;
よろしくお願いします。

Re:typedefテンプレート

Posted: 2009年5月17日(日) 14:26
by tk-xleader
typedefを削除してください。

Re:typedefテンプレート

Posted: 2009年5月17日(日) 15:23
by たかぎ
typedefを削除するだけではだめです。
結局何をしたいかによって、どう修正するかが変わってきます。

Re:typedefテンプレート

Posted: 2009年5月17日(日) 17:18
by kazuoni
tkさん、たかぎさん、ご回答ありがとございます。

行列を制御するクラスを作っていて、
そのクラスで行列の要素を構造体のメンバとして、持たせます。
そこで、要素の型をクラスオブジェクト宣言時に指定したかったんです。
すると、構造体にもテンプレートが必要になって、質問したような問題に躓きました。

別にメンバを構造体にしなくてもいいじゃないかってなるんですけど、
行列の乗算を行う関数で使うために、要素がまとまっている構造体をm1,m2として、
mamul(m1,m2)としたかったので、構造体が必要になってます。

Re:typedefテンプレート

Posted: 2009年5月19日(火) 01:12
by Justy

>どのように記述するのが一番なんでしょうか?

 普通に
[color=#d0d0ff" face="monospace]
template<class T>
struct X
{
T val;
};
[/color]

 でいいと思います。


 typedefを使うなら
[color=#d0d0ff" face="monospace]
typedef X<int> int_X;
typedef X<float> float_X;
[/color]

こういう風に型を決めて使えばいいかと。

Re:typedefテンプレート

Posted: 2009年5月19日(火) 23:28
by kazuoni
Justyさん、ご回答ありがとうございました。

いろいろ考えていて、なぜtypedefをつけるのかっと
よく考えていたら、必要のない構造で組むことができました。
浅はかな質問で大変申し訳ありませんでした。

今回はこれで解決とさせていただきます。

次回もよろしくお願いします。