ページ 11

テンプレートクラス内のメソッド

Posted: 2013年7月19日(金) 21:45
by 中級車
以下のようにテンプレートクラス内のあるメソッドだけ,メソッド呼び出し時に決定する(可変)2つ目のテンプレートを持たせたいのですが,可能でしょうか?是非行いたいのでよろしくお願いします.

コード:

template <typename T> class  classA{
public:
    template <typename S>methodA(S value){
    }    
}

Re: テンプレートクラス内のメソッド

Posted: 2013年7月19日(金) 22:01
by KORYUOH
可能です

Re: テンプレートクラス内のメソッド

Posted: 2013年7月19日(金) 22:09
by usao
どの型のメソッドが使われる(生成される?)かは,あくまでも
>メソッド呼び出し時
ではなくコンパイル時に決定されることになりますが.

#聞くよりもコンパイルしてみれば早いのに

Re: テンプレートクラス内のメソッド

Posted: 2013年7月19日(金) 22:12
by 中級車
回答有難う御座います.

warning C4244: '引数' : 'double' から 'int' への変換です。データが失われる可能性があります。
1> .\main.cpp(100) : コンパイルされたクラスの テンプレート のインスタンス化 'void classA<T>::mehodA<int>(classA<int> *,int)' の参照を確認してください
1> with
1> [
1> T=double
1> ]
処理内容としては,値のコピーをしているだけでして,
実はコンパイルも通り実行可能ですが,
TがintやcharでSがdoubleならいいのですが,逆の場合に,コンパイル時に警告が出るんです.
これは無視しても問題無いということですかね・・・.
ただおそらくインスタンス作成時にTもSも同じになってしまっているんじゃないかと思うのですが,どうなのでしょうか?

Re: テンプレートクラス内のメソッド

Posted: 2013年7月19日(金) 22:41
by 中級車
すいません,自己解決しました.有難う御座いました.

(S)でキャストしたら警告は無くなりました.