我想覆蓋派生類中的模板方法從基類的虛擬方法;只是想知道是否有任何聰明的方法或解決方法,使這成爲可能。是否可以使用派生類中的模板方法覆蓋虛擬方法?
#include <iostream>
using namespace std;
struct A
{
virtual void AF(int i)
{
std::cout << "Function in A" << std::endl;
}
virtual void af(int i)
{
std::cout << "Function in A" << std::endl;
}
};
struct B
{
virtual void BF(int i)
{
std::cout << "Function in B" << std::endl;
}
virtual void bf(int i)
{
std::cout << "Function in B" << std::endl;
}
};
template<bool IS_A>
struct C : public A, public B
{
template<class I>
typename std::enable_if<std::is_same<int, I>::value && IS_A,void>::type AF(I i)
{
std::cout << "Function override from A in C" << std::endl;
}
template<class I>
typename std::enable_if<std::is_same<int, I>::value && !IS_A,void>::type BF(I i)
{
std::cout << "Function override from B in C" << std::endl;
}
template<class I>
void af(I i)
{
std::cout << "Function override from A in C" << std::endl;
}
template<class I>
void bf(I i)
{
std::cout << "Function override from B in C" << std::endl;
}
};
int main() {
int i(0);
{
A * a = new C<true>();
a->AF(i);
a->af(i);
}
{
B * b = new C<false>();
b->BF(i);
b->bf(i);
}
return 0;
}
輸出是:
- 功能在//希望這是功能覆蓋從A用C
- 功能在//希望這是功能覆蓋從A用C
- 功能的乙//希望這是功能從重寫中的B下在乙
- 功能//想這在C
謝謝。
如果只爲A和B的相同'int'啓用它們,那麼對C :: AF和C :: BF使用模板的目的是什麼? –