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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
中級車

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

#1

投稿記事 by 中級車 » 6年前

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

コード:

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

KORYUOH
記事: 44
登録日時: 7年前

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

#2

投稿記事 by KORYUOH » 6年前

可能です
C言語を使うと自分の足を誤って撃ち抜いてしまうことがある。 C++を使えばそのような間違いを犯しにくくなる。しかし、やってしまったときには足全体が無くなる。

アバター
usao
記事: 1565
登録日時: 6年前

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

#3

投稿記事 by usao » 6年前

どの型のメソッドが使われる(生成される?)かは,あくまでも
>メソッド呼び出し時
ではなくコンパイル時に決定されることになりますが.

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

中級車

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

#4

投稿記事 by 中級車 » 6年前

回答有難う御座います.

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: テンプレートクラス内のメソッド

#5

投稿記事 by 中級車 » 6年前

すいません,自己解決しました.有難う御座いました.

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

閉鎖

“C言語何でも質問掲示板” へ戻る