我打算写一个简单的通用智能指针模板,它允许程序员在调用函数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。 –