基本上我今天發現自己編寫大量的代碼象下面這樣:「重定向」類成員函數?
#define VAL_1 0
#define VAL_2 1
class A {
public:
void memberA();
void memberB();
...
void write(uin32_t address);
}
void
A::
memberA() {
this->write(VAL_1);
}
void
A::
memberB() {
this->write(VAL_2);
}
...
所以基本上,我有「漂亮」的名字memberA
,memberB
一些任務確實不僅調用同一個函數write
有不同的觀點。值VAL_0
和VAL_1
不一定知道使用我的課程進行編碼。 memberA
或memberB
背後的實施細節也沒有,儘管write
可能會在某些時候公開。
基本上,現在我重複同一行代碼this->write(...)
一遍又一遍。我正在尋找一種繞過此步驟並立即調用相應寫入的解決方案。一類傳遞函數參數有點像C++的構造函數從基類,可能與匹配參數的:
#define VAL_1 0
#define VAL_2 1
class A {
public:
bool memberA() : write(VAL_1);
bool memberB() : write(VAL_2);
...
bool write(uin32_t address);
}
我想知道是否有可能是一個在Boost.Bind或一些聰明的模板編碼讓我實現這種或那種事情?
感謝,
FROB
那麼,我明白這一點。然而,'memberA'和'memberB'將在子類中有不同的實現,所以使用你的解決方案我不能覆蓋這些... – FRob 2012-02-29 09:43:46
我的建議是隻寫*寫*公共,而不是擁有memberA和memberB函數,如完全刪除這些函數,而只是讓客戶端寫my_a.write(address_val1),例如順便說一句,你是否試圖做這個優化?如果是這樣,在編譯器應用其優化之後,memberA和memberB通常沒有開銷,因此從處理器效率角度來編寫這些函數的成本實際上是零。如果你發現編寫這些函數乏味,那麼這是一個不同的事情......但使用宏來產生你的... – stinky472 2012-02-29 17:05:48
類方法通常會被視爲黑客。它不會在正常的生產環境中對代碼進行審查,以便通過預處理器簡化已經像這樣的一行代碼。 – stinky472 2012-02-29 17:05:57