G-s*_*G-s 4 c++ templates overriding
我有一个带有虚函数的基类:
class Base
{
public:
virtual void Function();
};
void Base::Function()
{
cout << "default version" << endl;
}
Run Code Online (Sandbox Code Playgroud)
和派生的模板类:
template <class T> class Derived : public Base
{
public:
virtual void Function();
};
Run Code Online (Sandbox Code Playgroud)
Function()除了某些选定类型之外,是否有办法从所有类型的基类中提取出来?所以,我想是能够定义一个重写Function(),比如说,int和long:
void Derived<int>::Function()
{
cout << "overriden version 1" << endl;
}
void Derived<long>::Function()
{
cout << "overriden version 2" << endl;
}
Run Code Online (Sandbox Code Playgroud)
并具有Function()所有其他类型的默认版本,而没有Function()为它们明确定义,因此输出为
int main ()
{
Derived<int> derivedInt;
derivedInt.Function();
Derived<long> derivedLong;
derivedLong.Function();
Derived<double> derivedDouble;
derivedDouble.Function();
}
Run Code Online (Sandbox Code Playgroud)
将会
overriden version 1
overriden version 2
default version
Run Code Online (Sandbox Code Playgroud)
可能吗?
实际上,类模板的成员函数是函数模板,因此您可以对其进行专门化:
template <typename T> class Foo
{
void Function();
};
template <typename T> void Foo::Function() { /* ... */ }
template <> void Foo<int>::Function() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3878 次 |
| 最近记录: |