関数の引数に型名を指定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
spaaaark・∀・
記事: 66
登録日時: 12年前
住所: 埼玉
連絡を取る:

関数の引数に型名を指定

#1

投稿記事 by spaaaark・∀・ » 12年前

こんにちは、知っている方は知っていると思います、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型の変数*/
};
という使い方を覚えたばかりです。どなたかご教授をよろしくお願いいたします。
クリエイティブな生活で刺激的な毎日を!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 12年前

関数のオーバーロードでも書けるけど、やりたい事次第かなぁ。
「関数のオーバーロード」
http://wisdom.sakura.ne.jp/programming/cpp/cpp16.html

テンプレート関数で上手く書けるならそれでも良いけど、内部の処理が同じじゃないと出来ませんよ。
「C++編(言語解説) 第26章 テンプレート関数」
http://www.geocities.jp/ky_webid/cpp/language/026.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
spaaaark・∀・
記事: 66
登録日時: 12年前
住所: 埼玉
連絡を取る:

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

#3

投稿記事 by spaaaark・∀・ » 12年前

>>softya様
ご返信ありがとうございます。

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

コード:

template <typename T> T Func(){
    return /*指定した型の値*/
};
int main(){
    int A = Func<int>();    //// int型
    double B = Func<double>();    //// double型
    return 0;
}
という記述方法で何とかできそうです。
ご協力ありがとうございました。
クリエイティブな生活で刺激的な毎日を!

閉鎖

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