我打算寫一個簡單的通用智能指針模板,它允許程序員在調用函數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++成員函數調用」中描述的方法工作,但想知道是否有更通用和更優雅的解決方案。
請說明您的具體問題或添加其他詳細信息,以確切地突出顯示您的需求。正如目前所寫,很難確切地說出你在問什麼。請參閱[如何提問](http://stackoverflow.com/help/how-to-ask)頁面以獲得澄清此問題的幫助。 – Barry
這個問題引用了Mixins的一個非常好的例子,我相信它和你正在嘗試做的事情有關:http://stackoverflow.com/questions/34193264/mixin-and-interface-implementation/34193545#34193545 –
我想你'進入[面向方面的編程](https://en.wikipedia.org/wiki/Aspect-oriented_programming#cite_note-22),爲此在2000年及以後開發了幾個框架和工具集。例如。查找[AspectC++](https://en.wikipedia.org/wiki/AspectC%2B%2B)(我沒有使用它,我剛剛通過Google搜索發現它)。據我所知,這個想法源於ParkPlace。 –