C++设计问题

每天UP一点点 2017-04-10 03:49:31
假设设计以下函数
fn(参数随意)
{
A() //固定
C() //不定
B() //固定
}

要求在A与B不变的情况下可以任意改变C(),C()的函数形式不统一,且传入不同的C()时不用额外修改函数

举个实际例子:
A()为开启进度条,B()为关闭进度条,C()为某个耗时功能,进度条操作固定,功能不定

想很久了,大神们帮帮忙啊
...全文
1291 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hindsights 2017-11-21
  • 打赏
  • 举报
回复
就是把参数直接打包在类里面,然后调用C函数就不需要参数了,Command Pattern和stl里的bind还有其他语言的匿名函数都是类似这种用法
Painot 2017-10-12
  • 打赏
  • 举报
回复
回调,或者模板类等都可以实现的啊就看你自己习惯用哪种方式咯
zarelaky 2017-09-07
  • 打赏
  • 举报
回复
关于参数个数问题,弄个不相关的,也是在c++中,一切皆是对象思想的一种实现. int fn(int a, int b){ return a + b; } class fn{ public: fn(int a, int b): _a(a), _b(b){} int operator() { return _a + _b; } private: int _a; int _b; };
码无痕 2017-09-02
  • 打赏
  • 举报
回复
参数不固定,那就给固定下来,参数和返回值使用结构体封装起来,用void*指针传入,然后用int型flag标识是哪个结构体,C函数根据不同flag执行不同流程便是
stendson 2017-09-01
  • 打赏
  • 举报
回复

template < typename Strategy >
void Fn
{
	A();
	Strategy::C();  //传入不同的策略,调用不同的函数
	B();
}
lxr5109 2017-07-25
  • 打赏
  • 举报
回复
引用 10 楼 zhengjiankang 的回复:
Command pattern例子: ICommand: void preProcess(); virtual void process(); void postProcess(); void execute(){ preProcess(); process(); postProcess(); } CommandA(ICommand): virtual void process(){ ...} # 参数在CommandA实例里面用成员变量。 回调,或者说6楼的方法,C和C++都可以实现: C: fn (callback): { A(), callback(), B() } # 参数在callback里面去想办法获取。 IIntface: virtual void execute() = 0; fn(IInterface *p): {A(); p->execute(); B();} #参数同样在具体的实例里面。
说的很全啊,补充一个,c++成员函数倒是不建议用回调,所以上面6楼才会注明C吧。
u013211185 2017-07-24
  • 打赏
  • 举报
回复
参数不定的话,可更改设计方式。
zhengjiankang 2017-07-18
  • 打赏
  • 举报
回复
Command pattern例子: ICommand: void preProcess(); virtual void process(); void postProcess(); void execute(){ preProcess(); process(); postProcess(); } CommandA(ICommand): virtual void process(){ ...} # 参数在CommandA实例里面用成员变量。 回调,或者说6楼的方法,C和C++都可以实现: C: fn (callback): { A(), callback(), B() } # 参数在callback里面去想办法获取。 IIntface: virtual void execute() = 0; fn(IInterface *p): {A(); p->execute(); B();} #参数同样在具体的实例里面。
zhengjiankang 2017-07-18
  • 打赏
  • 举报
回复
其实上面的人已经给了不同的答案了。
zhengjiankang 2017-07-18
  • 打赏
  • 举报
回复
C: callback。
赵4老师 2017-04-11
  • 打赏
  • 举报
回复
Hook myself
纹枰老妖 2017-04-11
  • 打赏
  • 举报
回复
引用 3 楼 qq_30251721 的回复:
[quote=引用 2 楼 wenpinglaoyao 的回复:] 没看懂您想问什么?您指的是函数指针或变长参数表吗?
好吧,我想问的是怎样才能实现fn()这个函数[/quote] 看来自己还是水平太低,无法帮助您,只能帮您顶一下了,祝好运!
ID870177103 2017-04-10
  • 打赏
  • 举报
回复
偏向面向对象的话,用适配器模式 偏向模板的话,用std::function<void ()> 偏向原始方法的话,用消息函数
每天UP一点点 2017-04-10
  • 打赏
  • 举报
回复
引用 1 楼 angel6709 的回复:
command pattern
能否不用设计模式,只用语言特性解决这个问题?
每天UP一点点 2017-04-10
  • 打赏
  • 举报
回复
引用 2 楼 wenpinglaoyao 的回复:
没看懂您想问什么?您指的是函数指针或变长参数表吗?
好吧,我想问的是怎样才能实现fn()这个函数
纹枰老妖 2017-04-10
  • 打赏
  • 举报
回复
没看懂您想问什么?您指的是函数指针或变长参数表吗?
angel6709 2017-04-10
  • 打赏
  • 举报
回复
command pattern

5,531

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧