3
在編寫程序時,我想出了一段代碼,我無法實現免費的代碼複製。避免用於區分常量和非常量的模板函數中的代碼重複
#include <iostream>
using namespace std;
class Presenter{
public:
template <typename T>
void addField(T& t){
cout << "do something that could happen to modify t" << endl;
}
template <typename T>
void addField(const T& t){
cout << "do something that cannot possibly happen to modify t" << endl;
}
};
class Presented{
public:
Presented() : a(0), b(0.) {}
void bind(Presenter& p){
p.addField(a);
p.addField(b);
//...
}
void bind(Presenter& p) const {
p.addField(a);
p.addField(b);
//...
}
private:
int a;
double b;
//...
};
int main() {
Presenter presenter;
Presented p1;
const Presented p2;
p1.bind(presenter);
p2.bind(presenter);
}
這是一個簡單的虛擬程序,它顯示了這個問題。如您所見,兩個bind
函數的代碼(看起來)完全相同。當然不是這樣,因爲使用了兩種不同的功能(addField
),這些功能只發生在共享名稱上。
儘管如此,我一直在尋找一種方法來刪除需要逐字寫入void bind(Presenter& p) const
。
有沒有人看到達到目標的方法?我無法拿出一個。
靜......我是相當那裏,但我沒想到使它的靜態的。非常感謝你! –