想象以下場景:C++:調用重載函數的派生類作爲參數太多(沒有明確的轉換)
template<class T>
void myFunction(T *)
{
//do nothing
}
void myFunction(myBase * _base)
{
//do something with _base
}
int main(int argc, const char* argv[])
{
myDerivedFromBase * ptr = new myDerivedFromBase;
myFunction(ptr); //calls the templated version
myFunction(static_cast<myBase*>(ptr)); //calls the correct version
delete ptr;
}
基本上我想要實現的模板函數被調用爲指針,不是從派生我的基地。如果一個ptr是從myBase派生的,我希望第二個版本的myFunction在沒有顯式強制轉換的情況下被調用。那可能嗎?
這不會出現運行時速度損失,因爲它發生在編譯時正確嗎? – moka 2011-06-06 14:40:33
是的,這完全是編譯時間(它阻止編譯器匹配來自myBase派生類的模板)。運行時沒有額外的事情發生。 – Sven 2011-06-06 14:43:06
好吧,我試過這種使用提升,但我似乎無法得到它的工作。我得到以下錯誤:<!提振:: is_base_of ::值,bool>的模板 類型名稱的boost :: enable_if ::鍵入myFunc的(T * _bla) { \t的cout << 「喇嘛」 << ENDL; } /錯誤:類型/在參數1模板參數列表值不匹配「的模板<類電導率,類T>結構的boost :: enable_if」 錯誤:預期的類型時,得到了「升壓:: is_base_of ::值' –
moka
2011-06-06 15:39:32