华企网站建设,微分销系统价格,网页设计叫什么行业,wordpress 采集函数可变参数好像很厉害的样子#xff0c;会节省很多手写代码#xff0c;让编译器自动帮我们生成代码
templatetypename Fun, typename...Args void invoke(Fun fun, Args...args) { fun(std::forwardArgs(args)...); } 任意函数包装器…可变参数好像很厉害的样子会节省很多手写代码让编译器自动帮我们生成代码
templatetypename Fun, typename...Args void invoke(Fun fun, Args...args) { fun(std::forwardArgs(args)...); } 任意函数包装器搞个面向切面代理信手拈来
仿照C#的委托
templatetypename Fun class my_delegate { public: my_delegate(){} ~my_delegate(){} templatetypename...Args void operator()(Args...args) { for (auto i : m_funs) { i(std::forwardArgs(args)...); } } void append(Fun cb) { m_funs.push_back(std::move(cb)); } my_delegate operator(Fun cb) { m_funs.push_back(std::move(cb)); return *this; } my_delegate operator(Fun cb) { m_funs.push_back(std::move(cb)); return *this; } my_delegate operator-(Fun cb) { auto it find(m_funs.begin(), m_funs.end(), cb); if (it ! m_funs.end()) m_funs.erase(it); return *this; } private: std::vectorFun m_funs; };
typedef void (*Fun)(int sender, int params);
void button_click(int sender, int params) { std::cout invoke __FUNCTION__ std::endl; std::cout sender sender params params std::endl; } void button_other_event_handler(int sender, int params) { std::cout invoke __FUNCTION__ std::endl; std::cout sender sender params params std::endl; } int main() { my_delegateFun delegate_obj; delegate_obj button_click; delegate_obj button_other_event_handler; delegate_obj(0, 0); delegate_obj - button_click; delegate_obj(10, 20); return 0; } 还停留在老掉牙的C的认知上看了一些C11的新特性会不会激发对C的新兴趣