趣味+メモ用のブログです。
GNU/Linux関連、OSS関連情報、調査事項になるでしょうが、何を書くか分かりません。
× [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 |
カレンダー
カテゴリー
フリーエリア
最新コメント
最新記事
(05/02)
(01/25)
(01/15)
(12/04)
(12/01)
最新トラックバック
ブログ内検索
最古記事
(02/21)
(07/12)
(07/12)
(07/18)
(07/20) |