我的函數模板有以下問題。如果我有這樣的功能模板,其中T
可以任ClassA
或ClassB
:如何將模板類型作爲參數傳遞給非模板函數?
template<typename T, bool flag>
void function(T& someT){
if(flag){ /*If 'flag' is true, 'someT' MUST be of type ClassA*/
nonTemplateFunction1(someT);
}
else{ /*Else 'someT' must be of type ClassB*/
nonTemplateFunction2(someT);
}
}
而在其他一些文件我有
void nonTemplateFunction1(ClassA& a){...}
,並在另一個文件中我有
void nonTemplateFunction2(ClassB& b){...}
現在,如果我打電話給我的函數模板,編譯時出現錯誤:
error: no matching member function for call to 'nonTemplateFunction2'
我想這是因爲編譯器測試了nonTemplateFunction2
與ClassA
作爲參數的例子。但這絕不會發生(至少我,程序員,照顧這個)。我怎樣才能讓我的程序編譯?有什麼解決方法?
編輯:一個更精確的錯誤:
./tabledata.hh:371:9: error: no matching member function for call to 'bulk_insert' bi.bulk_insert(bl, aRel_Vec[j]);
../pax/bulk_insert_pax.hh:21:8: note: candidate function not viable: no known conversion from 'value_type' (aka 'NSM_Relation') to 'PAX_Relation &' for 2nd argument void bulk_insert(const BulkLoader& aBulkLoader, PAX_Relation& aRelation);
嗯,看來我必須通過然後指向我的T。不是我最喜歡的解決方案,但它應該工作 –
@ N.Weber我認爲這是最快的選擇,是的。 –