忍者ブログ
ゲーム関連の話題に絞っていましたが、全然書かないのでいろいろ解禁してみたり。
[16]  [15]  [14]  [13]  [12]  [11]  [10]  [9
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

スマートポインタはいろいろと便利ですが、そのままでは各種ハンドルの保持が出来ません。
大体ハンドルは何かのポインタなので、shared_ptr<void>で保持するのも一つの手ですが、
unique_ptrで十分な箇所ではなんだかもったいない感じです。

かといって、unique_ptrだと関数オブジェクトを作ったりテンプレート引数にいろいろ渡したり不便です。
なので、簡単に利用できるようにテンプレート化してみました。
多分問題なく使用出来るはず……です。
無保証って事で一つ。
適当にコピーとかして使ってください。

#include<functional>
#include<memory>
#include<iostream>

template<typename T>
struct Deleter{
    typedef T pointer;
    typedef std::function<void(T)> DeleteFunction;

    DeleteFunction df;

    void operator()(T rc){
        df(rc);
    }

    Deleter(DeleteFunction df){
        this->df = df;
    }
};

template<typename T>
std::unique_ptr<T, Deleter<T>> CreateUniquePtr(T t, typename Deleter<T>::DeleteFunction df){
    return std::unique_ptr<T, Deleter<T>>(t, Deleter<T>(df));
}

int main(){
    int i = 42;

    {
        auto intHolder = CreateUniquePtr(i, [](int i){
            std::cout << i << std::endl;
        });
    }
}
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
Twitter
Twitter Update
ブログ内検索
カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
最新コメント
最新トラックバック
プロフィール
HN:
100poisha
性別:
非公開
アクセス解析
Copyright © 100poishaのブログ All Rights Reserved.
Designed by north sound
Powered by Ninja Blog

忍者ブログ [PR]