PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 同function name内容不同的方法
楼主:
overhead
(overhead)
2015-06-05 22:28:56
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++(C++ mfc)
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
none
问题(Question):
我现在需求是让使用者在一开始,决定他要用TCP连线还是serial连线
TCP和serial不是重点
重点是我希望进去后两种连线是用完全一样的class, function name
例如open, close, recv, send
这样才方便后面架构的整洁
目前我的写法是这样
int CMyDoc::mainLoop()
{
CConnect conn;
type = TCP; //使用者设定成TCP
conn.open();
while(1)
{
conn.recv(A,B,C);
}
}
int CConnect::open()
{
if(type == TCP)
m_tcpConn.open();
else(type == SERIAL)
m_serialConn.open();
//两个open分别有不同程式码
}
int CConnect::recv(A,B,C)
{
if(type == TCP)
m_tcpConn.recv(A,B,C);
else(type == SERIAL)
m_serialConn.recv(A,B,C);
}
而CConnect拥有成员
CTcpConnect m_tcpConn;
CSerialConnect m_serialConn;
这会造成我每次用recv时,都会多花一次在比对他的类型,实在很伤效能
想请问版上有没有人能提供对付这种问题的关键字或建议呢?
希望是一开始有个注册步骤,或者直接用index指到正确function之类的(?)
要维持最外层的function不动,里面用到正确的处理方式
可是又不会跟我目前一样每次进去都要比对一次
非常感谢各位m(_ _)m
作者:
kao50126
(无从)
2015-06-05 22:30:00
用C++的继承?
楼主:
overhead
(overhead)
2015-06-05 22:31:00
求楼上详细开导QQ
作者:
Feis
(永远睡不着 @@)
2015-06-05 22:51:00
你是要 strategy pattern 吗?你有两个成员让我有点困惑
作者:
kao50126
(无从)
2015-06-05 23:01:00
我的想法是class+virtual,各实作继承于这个class
作者:
bdvstg
(bdvstg)
2015-06-05 23:17:00
function pointer?
作者: anyoiuo
2015-06-06 01:43:00
http://ideone.com/nH0mnY
m_tcpConn, m_serialConn可能来自三方,那用strategy或state pattern,得要抽出base class跟两个derived class在Runtime做dynamic binding,效能上可能不见得比原本好应该function pointer应该比较合乎你的需求。
作者:
bibo9901
(function(){})()
2015-06-06 02:15:00
virtual function 就是 function pointer但如果坚持 class name 也要一样的话就只能这样了
作者: anyoiuo
2015-06-06 02:31:00
意义上不同喔!virtual function是建在v_table在Run time如果一样那OO也就不会有Polymorphism这词出现了硬要注册版:
http://ideone.com/zZtcvk
作者:
bibo9901
(function(){})()
2015-06-06 06:39:00
我不确定标准是否有规定,但大部份vtable都是用functionpointer实作的(吧)
楼主:
overhead
(overhead)
2015-06-06 10:49:00
非常感谢各位!! 现在来研究大家分享的方法!刚刚查了资料 vtable好像真的常用function pointer 也比我想像的还快 就决定都改成多型了!非常感谢各位!
作者: anyoiuo
2015-06-06 20:14:00
实做上当然是pointer存,我意思只是不能直接说是一样的东西
继续阅读
[问题] int将资讯相加后如何切割
jiqian
[问题] 安装OpenCV问题
lin11220206
[问题] serial port认不到dbcc_name
williamsm
[问题] Build出来不一样啊!
DiDiKoKo
[问题] 物件与函数问题
AgentSkye56
[问题] 修改OpenCV source编译失败
jiqian
[问题] 使用multi-thread去接收封包反而慢??
r596twy
[问题] 教师甄试考题疑问
kimgtob
Re: [问题] swith_case 用法
PkmX
[问题] Unix compiler so档 Linux下可以使用?
grabham
Links
booklink
Contact Us: admin [ a t ] ucptt.com