忍者ブログ
趣味+メモ用のブログです。 GNU/Linux関連、OSS関連情報、調査事項になるでしょうが、何を書くか分かりません。
[75] [74] [73] [72] [71] [70] [69] [68] [67] [66] [65]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

値を保持するテンプレートクラスを書いてみた。




テンプレートは展開後は、別々のクラスになってしまう。
テンプレートを1つの型として扱いたい場合は、
Baseクラスを用意しておく必要がある。

下記のサンプルは、値を保持するテンプレートクラスであるが、
結局使うときにテンプレートのクラス名を指定する必要があり、
ちょっとかっこ悪い。(なんともならないだが・・・)

■ ソースコード ------------------------------------------------------------------------
  $ cat -n typevalue.cpp
     1
     2  #include <stdio.h>
     3
     4  class TypeValueBase {
     5    public:
     6      /* この関数はvirtualできないので継承できない */
     7      template<typename T>
     8      T getValue() { T dmy = 0; return dmy;};
     9  };
    10
    11
    12  /* Valueを保持するクラス */
    13  template<class T>
    14  class TypeValue :public TypeValueBase{
    15    private:
    16      T value_;
    17
    18    public:
    19      /* コンストラクタ */
    20      TypeValue(T v) {
    21        this->value_ = v;
    22      }
    23
    24      /* BaseクラスのgetValueとは別物 */
    25      T getValue() {
    26        return this->value_;
    27      }
    28  };
    29
    30
    31  template<typename T>
    32  void printTypeValue(TypeValueBase *typeVal )
    33  {
    34
    35    /* こちらはBaseクラスのgetValueを呼び出す */
    36    printf( "Base val:%x\n", typeVal->getValue<T>() );
    37
    38    /* こちらはサブクラスのgetValueをよびだす */
    39    printf( "Sub  val:%x\n", ((TypeValue<T>*)typeVal)->getValue() );
    40  }
    41
    42
    43  int main () {
    44
    45    /* コンストラクタで生成 */
    46    TypeValue<int>   intVal(0x12345678);
    47    TypeValue<short> shtVal(0x1234);
    48    TypeValue<char>  chrVal(0x12);
    49
    50
    51    /* テンプレート関数で出力 */
    52    printTypeValue<int>( &intVal );
    53    printTypeValue<short>( &shtVal );
    54    printTypeValue<char>( &chrVal );
    55
    56    return 0;
    57  }
---------------------------------------------------------------------------------------

■ 実行結果 ------------------------------------------------------------------------
$ ./typevalue
Base val:0
Sub  val:12345678
Base val:0
Sub  val:1234
Base val:0
Sub  val:12
---------------------------------------------------------------------------------------
PR


忍者ブログ [PR]
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
一乗寺 又兵衛
性別:
男性
職業:
コンパイル
趣味:
コンパイル
バーコード
ブログ内検索