dポイントプレゼントキャンペーン実施中!

以下のようなクラスをconstの参照渡しでうけとる、可変引数を持つ関数を作りたいのですが、以下のようにしてもうまくいきません。
何か良い方法はないものでしょうか?


template<class TT> class vector3{
public:
 enum{NUM=3};
 TT x[NUM];
 void Sum(const int num,...);
};
template<class TT> void vector3<TT>::Sum(const int num,const ...){
 int i,j;
 va_list list;
 va_start(list,num);
 for(i=0;i<NUM;i++){
  x[i]=va_arg(list,&vector3<TT>).x[i];
 }
 for(j=1;j<num;j++){
  for(i=0;i<NUM;i++){
   x[i]+=va_arg(list,&vector3<TT>).x[i];
  }
 }
 va_end(list);
}

A 回答 (2件)

残念ながらないです.


「...」に当てはまる引数はすべて右辺値に変換されます (同様に配列名や関数名も対応するポインタに変換される).
ついでにいうと, 変換した後の値が nonPOD なクラス型だとその振る舞いは未定義であるとなっています.
だから, 参照で渡すのは (クラスかどうかには無関係に) 不可能です.
というか, ポインタで渡しちゃだめなの?
    • good
    • 0
この回答へのお礼

そうですか、どうも有り難うございました。

お礼日時:2009/04/08 02:55

試していませんが、どうせ書くなら


>  x[i]=va_arg(list,&vector3<TT>).x[i];
>   x[i]+=va_arg(list,&vector3<TT>).x[i];
ではなくて、
  x[i]=va_arg(list,vector3<TT>&).x[i];
   x[i]+=va_arg(list,vector3<TT>&).x[i];
ではないかと。
    • good
    • 0
この回答へのお礼

ああそうでしたね^^;
まちがえてました

お礼日時:2009/04/08 02:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!