ページ 11

関数の引数に型名を指定

Posted: 2013年8月17日(土) 20:31
by spaaaark・∀・
こんにちは、知っている方は知っていると思います、spaaaark・∀・と申します。
今回、関数の引数に、intやdoubleなどの型名を使用する方法がわからず、こちらのほうに質問させていただきました。
言語はC++です。

内容ですが、引数に指定した型と同じ型の数値を返す関数を作りたいのです。
そこで、sizeof演算子のような引数に型名を指定する関数を作りたいと思ったのですが、これはどのようにやるのでしょうか。
恐らく、テンプレートの応用だと思うのですが、その方法がわかりません。
次に示す例ですが、Func関数の中で、あるテキストファイルから数値を読み取っていると想定してください。

コード:

int A = Func(int);          //// こうするとint型の戻り値になる
double B = Func(double);    //// こうするとdouble型の戻り値になる
/* cf. sizeof(int)
       sizeof(double)*/
コードの可読性を向上させることが目的で、このような機能を追加したいと思っています。
テンプレートの使い方は、

コード:

template <class T> T hoge(T type){
    /*処理*/
    return /*T型の変数*/
};
という使い方を覚えたばかりです。どなたかご教授をよろしくお願いいたします。

Re: 関数の引数に型名を指定

Posted: 2013年8月17日(土) 20:56
by softya(ソフト屋)
関数のオーバーロードでも書けるけど、やりたい事次第かなぁ。
「関数のオーバーロード」
http://wisdom.sakura.ne.jp/programming/cpp/cpp16.html

テンプレート関数で上手く書けるならそれでも良いけど、内部の処理が同じじゃないと出来ませんよ。
「C++編(言語解説) 第26章 テンプレート関数」
http://www.geocities.jp/ky_webid/cpp/language/026.html

Re: 関数の引数に型名を指定

Posted: 2013年8月17日(土) 21:05
by spaaaark・∀・
>>softya様
ご返信ありがとうございます。

テンプレートについていろいろ調べてみたところ、

コード:

template <typename T> T Func(){
    return /*指定した型の値*/
};
int main(){
    int A = Func<int>();    //// int型
    double B = Func<double>();    //// double型
    return 0;
}
という記述方法で何とかできそうです。
ご協力ありがとうございました。