0
我有一個C++代碼,當前看起來像這樣:有一個類層次結構來執行一些比較和使用它的列表類。基於某個模式對象在運行時確定要使用哪種比較操作。這裏是結構:如何正確地用模板重寫這個使用繼承的C++代碼
class A{
bool doComparison(const string& s1, const string& s2) const=0;
}
class B: public A{
bool doComparison(const string& s1, const string& s2) const {
...
}
}
class C: public A{
bool doComparison(const string& s1, const string& s2) const {
...
}
}
template <class, S>
public FancyList{
shared_ptr<A> z_;
vector<S> v;
FancyList(shared_ptr<A> z) : z_(z);
void DoSmth(){
....
z_->doComparison(arg1, arg2);
}
}
typedef FancyList<string> FancyStringList;
// Determine which comparison to use at runtime
shared_ptr<A> c = nullptr;
switch(type):
case int:
c = make_shared<B>();
break;
case double:
c = make_shared<B>();
break;
FancyStringList l(c);
l.push_back("stuff");
C#曾經是我的主要語言,所以這段代碼對我來說似乎沒問題。但我被告知,這種方法的問題在於它使用虛函數,因此在方法調用中會有一些小的開銷。什麼是適當的C++ - 重新組織這段代碼的方式,所以不需要擁有這個類的層次結構,也不需要使用虛函數?
'do'是一個C++關鍵字。你不能用這個標識符來命名你的功能。 – StoryTeller
'在運行時基於某個模式對象確定要使用哪種比較操作'。這意味着無論如何,你的程序必須花費一些CPU圈來選擇比較方法,對吧?然後,我認爲這種輕微的開銷在這種情況下是可以接受的,它使您的代碼更易於閱讀和**擴展**。 –
'switch'語句中的'type'是什麼? –