2016-11-18 7 views
1

私はポインタで作られたboost :: tupleを持っています(ポインタの数はテンプレートのメタプログラミングであることがわかっていません)。例えばポインタのboost :: tupleをヌル化/クリアする

boost::tuple<int*, Foo*, std::string*> mytuple

0へのポインタを初期化する方法はありますか?

私のような述語を作成しようとした:

struct Nullify 
{ 
    template <class TypePtr> 
    void operator()(TypePtr& ptr) const 
    { 
     ptr = 0 
    } 
}; 

boost::fusion::for_each(mytuple, Nullify()); 

しかし、私は可能であれば、私はブーストを使用したい、理想的にはerror: no matching function for call to...

を取得::なしで直接for_eachループ内のラムダ別の構造体。 (私はC++ 03を使用しています)

例:無効にする

boost::fusion::for_each(mytuple, boost::lambda::_1 = 0); 

たとえば、

boost::fusion::for_each(mytuple, delete boost::lambda::_1); 
+2

あなたは(https://stackoverflow.com/questions/10766112/c11-i-can-go-from-multiple-args-to-tuple-but-can-i-go-いくつかの[テンプレートの魔法]を使用することができますタプルからマルチプルへ)タプルを「アンパック」し、各要素に対して操作を実行します。 [こちらも参照](https://stackoverflow.com/questions/7858817/unpacking-a-tuple-to-call-a-matching-function-pointer) – CoryKramer

+0

@CoryKramer C++ 03 – Yakk

+0

私は本当にそれを "範囲"のやり方でやりたかったのです。理想的には、for_eachループ内にboost :: lambda式(たとえば_1 = 0)を含めてできるだけ簡潔に – codeJack

答えて

2

を削除するには、それはそれに応じて初期化することにより簡単に行うことができます。

boost::tuple<int*, Foo*, std::string*> mytuple(nullptr, nullptr, nullptr); 

(またはnullptrがあなたのC++のバージョンでは使用できない場合NULLを使用します)。

hereのサブセクション「タプルの作成」を参照してください。

+0

NULLに初期化するために働くことができましたが、私は各ポインタを削除するための解決策が必要です。 さらに、タプルの引数の数がわからない(テンプレートのメタプログラミングの一部) – codeJack

+0

@codeJack:あなたの質問にそのことを述べるべきです。 – davidhigh

+0

質問を更新しました。 – codeJack

関連する問題