C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: テンプレート引数にポインタを与える


(過去ログ 67 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■39265 / inTopicNo.1)  テンプレート引数にポインタを与える
  
□投稿者/ びーしむ (8回)-(2009/08/04(Tue) 10:07:00)

分類:[C/C++] 

こんにちは、びーしむです。
みなさんの知識を分けてください。


C++ テンプレートテクニック本の「テンプレート引数にポインタを与える」を
元に以下のコードを書きました。

template<
    typename PRM,                           //変更するパラメータの型
    typename OBJ_CPTR,                      //パラメータを変更するオブジェクトのポインタ型(const)
    typename PRM  (*GetFunc)(OBJ_CPTR),     //get関数
    typename OBJ_PTR,                       //パラメータを変更するオブジェクトのポインタ型
    typename void (*SetFunc)(OBJ_PTR, PRM)> //set関数
class Foo {
//省略
};


*** 使い方(抜粋) ***

typedef shared_ptr<Glyph>       GlyphPtr_t; 
typedef shared_ptr<const Glyph> GlyphCPtr_t; 

void SetWidth(GlyphPtr_t p, int n){return p->SetWidth(n);}
int  GetWidth(GlyphCPtr_t p){return p->GetWidth();}

{
    typedef Foo<int,
        GlyphCPtr_t, &GetWidth,
        GlyphPtr_t,  &SetWidth> Foo_t;

    shared_ptr<Foo_t> pFoo(new Foo_t);
}


とりあえず、うまく動作しているので問題ないのですが、気になる点が2点あります。
良い方法があれば教えてください。
・スマートな書き方
・このような場合のセオリー
・自分ならこう書く
など


1.クラスのインスタンスを設定・取得する関数を使う場合について
CString の値を設定する場合
  void    SetName(GlyphPtr_t p, CString s){return p->SetName(s);}
  CString GetName(GlyphCPtr_t p){return p->GetName();}
を定義すればよいのですが、自分は引数と戻り値を下記のように定義するので
  void          SetName(GlyphPtr_t p, const CString &s){return p->SetName(s);}
  const CString GetName(GlyphCPtr_t p){return p->GetName();}
これではコンパイルできません。
Foo クラスの定義を直すだけで、対応できるのでしょうか?
(他にも PRM には、shared_ptr を使った shared_ptr<Hoge> を指定する場合もあります。)

2.shared_ptr<Foo_t> と shared_ptr<const Foo_t> をテンプレートの引数で、
OBJ_PTR, OBJ_CPTR に指定していますが、const が付いたほうを記述しない方法は
ありますか?


よろしくお願いします。

引用返信 編集キー/
■39271 / inTopicNo.2)  Re[1]: テンプレート引数にポインタを与える
□投稿者/ 774RR (376回)-(2009/08/04(Tue) 11:14:51)
なんだか非常に読みにくい(何がしたいのかソースコードを見て直観できない)のでコメント不能。
Foo_t と Gryph の関係がまったく見えてこないし
突然現れた Hoge がなんだかまったく理解不能だし

全体的に意味不明というか説明不足というかなんと言うか。
小手先のテクニックに走りすぎてはいないだろうか?
このコードを1年後に読んで自分で理解できる自信ある?俺はない。
引用返信 編集キー/
■39285 / inTopicNo.3)  Re[2]: テンプレート引数にポインタを与える
□投稿者/ びーしむ (9回)-(2009/08/04(Tue) 14:17:51)
774RR さんレスありがとうございます。

要点を整理できてないので質問を取り消します。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -