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