初めまして
テンプレートクラスについて質問があります。
私は今までほぼすべてのコードをhファイルに書いてきました。
しかし、今回ちょっとした心境の変化でhファイルとcppファイルにコードを分割しようと思い立ちました。
しかしここで問題が。。。
テンプレートクラスを分離できないのです。
正確には分離後のコードが気にくわないのです。
これを分割したら
となります(よね?)
どうしたもんかといろいろ探し回ったところ、以下のサイトを発見しました。
http://amagitakayosi.hatenablog.com/ent ... /03/184752
このサイトの下部では
「テンプレートクラスではデータだけ保持して、処理は別クラスに書く」
とあります。
しかし、この「別クラスに処理を書く」方法がわかりません。
ここで質問です。
別のクラスはどのような構成にすればいいのでしょうか?
そして、もしよろしければ上のAクラスを実際に分離してもらえないでしょうか?
よろしくお願いします<(_ _)>
[c++] テンプレートクラスにおける処理の分離
Re: [c++] テンプレートクラスにおける処理の分離
こちらは、質問の意味がくみ取れませんでした。すいません。別のクラスはどのような構成にすればいいのでしょうか?
(実装側のコーディング方法という意味であれば、後記のコードを参照)
こうじゃないですか?そして、もしよろしければ上のAクラスを実際に分離してもらえないでしょうか?
後、ヘッダー側のセミコロンが抜けています。
オフトピック
実際に使用するのであれば、初期化リストが必要なので、
コンストラクタ等で、xを初期化する必要があります。
コンストラクタ等で、xを初期化する必要があります。
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: [c++] テンプレートクラスにおける処理の分離
inemaruさん、ご指摘ありがとうございます。
ちょっと適当に書きすぎました^^;
改めてAクラスを書き直します。
こんな感じでどうでしょうか?^^;
つまりAクラスは
x->0、
Add(obj)->x+objを返す関数
ということで。。。
「テンプレートクラスにデータを保持、別のクラスに処理を書く」ということは、 このようなイメージを私は持ってたんですけど。。。
ちょっと適当に書きすぎました^^;
改めてAクラスを書き直します。
//A.h
template<typename T>
class A{
private:
T x;
public:
A();
T Add(T obj);
}
//A.cpp
#include"A.h"
template<typename T>
A<T>::A():x(0){}
template<typename T>
T A<T>::Add(T obj){return x+obj;}
つまりAクラスは
x->0、
Add(obj)->x+objを返す関数
ということで。。。
「テンプレートクラスにデータを保持、別のクラスに処理を書く」ということは、 このようなイメージを私は持ってたんですけど。。。
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: [c++] テンプレートクラスにおける処理の分離
(あくまで自分が読んだ限りの解釈ですが、)
記事の内容を見る限りだと、
「別クラス」と言っているのは、テンプレートクラスの実装の事を言っているように見えました。
A<型> の、「型」に入る内容が変わることで、別のクラスとして扱われる為
このような表現になっていると思われます。
最後に編集したユーザー inemaru on 2017年2月19日(日) 15:46 [ 編集 1 回目 ]
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: [c++] テンプレートクラスにおける処理の分離
なるほど、、、
私の読解力が足りなかったようです。(’・_・
ありがとうございました!
これで解決ということにします。
私の読解力が足りなかったようです。(’・_・
ありがとうございました!
これで解決ということにします。
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^