プログラマがいくつかの関数FUNC()を呼び出す前後に任意の数のラップを適用できる単純な汎用スマートポインタテンプレートを作成したいと考えています。例えば、 タイマー、ロック、log_start、FUNC()、log_end、ロック解除、タイマーの停止を開始する必要があった場合一般的なC++関数のラッピング
次に、プログラマーが3つのタイプと関数をテンプレートに指定した場所を簡単に書くことができます。コンパイラに残りをさせてください。 私はそれがタイプリストは、演算子オーバーロードと組み合わせる働いた方法と同様の方法で可変引数テンプレートを使用して行うことができる感覚を得る - 次に>
すなわち
class timer {}; // ctor start timer, dtor stop timer
class locker{}; // ctor lock, dtor unlock
class logger{}; // ctor lock, dtor unlock
いくつかのコードをなど
template <typename ...base_class_list>
class aggregate : public base_class_list... {};
using pre_conditions = aggregate<logger, locker, trans>;
class gadget
{
auto do_something() -> void;
}; // gadget
最後に(書いておきたい部分は一緒に接着する方法は分かりません)
SMART_PTR<pre_conditions, gadget> g;
g->do_something();
Bjarne Stroustrupの「C++メンバー関数呼び出しのラッピング」で説明されている手法を使用すれば、簡単に十分な作業を行えますが、より一般的で洗練されたソリューションがあるのだろうかと思っていました。
具体的な問題を明確にしたり、詳細を追加して必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明らかにするには、[How to Ask](http://stackoverflow.com/help/how-to-ask)ページを参照してください。 – Barry
この質問は、私があなたがやろうとしていることに関連していると信じているMixinsの非常に良い例を参照しています:http://stackoverflow.com/questions/34193264/mixin-and-interface-implementation/34193545#34193545 –
私はあなた2000年以降にいくつかのフレームワークとツールセットが開発された[アスペクト指向プログラミング](https://en.wikipedia.org/wiki/Aspect-oriented_programming#cite_note-22)に取り上げられました。例えば。 [AspectC++](https://en.wikipedia.org/wiki/AspectC%2B%2B)(私はそれを使用していない、私はちょうどグーグルでそれを見つけた)を参照してください。私の知る限りでは、このアイデアはParkPlaceに由来しています。 –