我試圖重載一些模板函數來執行特定的動作,如果我把它用一個給定的類MyClass的或任何派生類MyClassDer。下面是代碼:重載函數和繼承
#include <iostream>
struct MyClass {
virtual void debug() const {
std::cerr << "MyClass" << std::endl;
};
};
struct MyClassDer : public MyClass {
virtual void debug() const {
std::cerr << "MyClassDer" << std::endl;
};
};
template <typename T> void func (const T& t) {
std::cerr << "func template" << std::endl;
}
void func (const MyClass& myClass) {
std::cerr << "func overloaded" << std::endl;
myClass.debug();
}
int main(int argc, char **argv) {
func (1);
MyClass myClass;
func (myClass);
MyClassDer myClassDer;
func (myClassDer);
}
輸出是:
func template
func overloaded
MyClass
func template
func (myClassDer)
調用模板函數,而不是void func (const MyClass& myClass)
。我能做些什麼來獲得預期的行爲?
感謝
這似乎是正確的解決方案。我將會看到如何通過提升來實現這一點。 – user2811040
@ user2811040'boost :: enable_if'和'boost :: is_base_of'。而已。 – Angew
@ user2811040如果沒有C++ 11,將第二個模板參數也移到指針技巧中。 – Angew