template特殊化 – プログラミング – Home

通知
すべてクリア

[解決済] template特殊化


tenteku
 tenteku
(@tenteku)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

お世話になっております。

boost::array<T, size_t>
のような形で
Tを特殊化する場合どのように書けば良いのでしょうか?
array.hppやネットを覗いてみたんですがわかりませんでした・・。

環境はVS2008WinXPです。よろしくお願いします。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

答えを書いちゃうのは簡単だけど・・・

boost::array の特殊化ということなら、以下の3点を知っておけばできるかな。
・名前空間内 template の特殊化は、当該名前空間内で行う必要がある
・特殊化では template<> という書き方をする
・1つの template-parameter に対して特殊化したら parameter-list が1つ減る

ということで自分で試した結果を見せてみてほしい。


返信引用
tenteku
 tenteku
(@tenteku)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

arrayの特殊化とは違いますが、それはnamespaceつっこむだけっぽいので。。

template<class T>
class XX<T, 0>;

あるいは
template<>
class XX<A, 0>;

のような形は書けますが、Tだけを特殊化しようとするとテンプレート引数が足りません、
Tは宣言と互換性がありませんと怒られます。。ギブです。


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

> ・1つの template-parameter に対して特殊化したら parameter-list が1つ減る
つまり「まだ template 記述が必要」なわけだ。

サンプルなど
#include <iostream>
#include <cstdlib>

template<typename T, std::size_t N> struct hoge {
hoge() { std::cout << basic template hoge N= << N << std::endl; }
};

template<> template<std::size_t N> struct hoge<int, N> {
hoge() { std::cout << specialized hoge<int> N= << N << std::endl; }
};

int main() {
hoge<long, 4> a;
hoge<int, 8> b;
}


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

ということで 上記 hoge を N に対して特殊化してみてくれ。


返信引用
tenteku
 tenteku
(@tenteku)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

出来ました!ありがとうございます。ところでNに対してって定数化ってことですかね。
template<typename T>
struct hoge<T, 0>
{
hoge() { std::cout << basic template hoge zero << std::endl; }
};

template<>
struct hoge<int, 0>
{
hoge() { std::cout << specialized hoge<int> zero << std::endl; }
};

int _tmain(int argc, _TCHAR* argv[]){
hoge<long, 4> a;
hoge<int, 8> b;
hoge<long, 0> c;
hoge<int, 0> d;}

こうですかわかりません orz
自分の意図した通りには動いたつもりですが


返信引用
weezer
 weezer
(@weezer)
ゲスト
結合: 15年前
投稿: 1
 

テンプレート関係は以下の本が勉強になると思います。
どちらも在庫僅かなのでご注意を。

C++ テンプレート完全ガイド
http://www.amazon.co.jp/exec/obidos/ASIN/4798119229/mla-22/ref=nosim/

C++テンプレートテクニック
http://www.amazon.co.jp/exec/obidos/ASIN/4797354534/mla-22/ref=nosim/


返信引用
tenteku
 tenteku
(@tenteku)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

Nに対して特殊化の方はちょっと不明として
自分のやりたかったことは出来たので閉じます。
回答してくださった方々ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました