前提・実現したいこと
クラステンプレートの部分特殊化は非常に便利です.
しかし,部分特殊化するとすべてのメンバ関数を再定義しなければなりません.
可能であれば,再定義する必要のないメンバ関数は流用したいです.
良い解決方法があれば,教えてください.
よろしくお願いします.
ソースコードはテンプレートの特殊化 | Programming Place Plus C++編【言語解説】 第23章のものを書き換えました.
発生している問題・エラーメッセージ
error: 'class DataStore<int*>' has no member named 'PrintInit'
該当のソースコード
C++
1#include <iostream> 2 3template <typename T> 4class DataStore { 5private: 6 T mValue; 7 int init; 8public: 9 explicit DataStore(const T& value) : mValue(value), init(value) {} 10 void Print() const; 11 void PrintInit() const; 12}; 13 14template <typename T> 15void DataStore<T>::Print() const { 16 std::cout << mValue << std::endl; 17} 18 19template <typename T> 20void DataStore<T>::PrintInit() const { 21 std::cout << init << std::endl; 22} 23 24template <typename T> 25class DataStore<T*> { 26private: 27 T* mValue; 28 // int init; 29public: 30 explicit DataStore(T* value) : mValue(value) {} 31 void Print() const; 32 // void PrintInit() const; 33}; 34 35template <typename T> 36void DataStore<T*>::Print() const { 37 std::cout << *mValue << std::endl; 38} 39 40// template <typename T> 41// void DataStore<T*>::PrintInit() const { 42// std::cout << init << std::endl; 43// } 44 45int main() { 46 int num = 20; 47 DataStore<int> ds1(10); 48 DataStore<int*> ds2(&num); 49 ds1.Print(); 50 ds1.PrintInit(); 51 ds2.Print(); 52 ds2.PrintInit(); // error 53 return 0; 54}
補足情報(FW/ツールのバージョンなど)
C++11が望ましいですが,C++であればバージョンは限定しません.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/17 06:08 編集
2019/12/17 06:25
2019/12/17 06:29 編集
2019/12/17 06:43