有一个模板类,其中有一组字段和方法。当这个类被专门化时,对这些字段和方法的访问将丢失。我需要为所有专业创建一个通用部分,但这样创建新专业的用户就不必手动添加它。那些。我需要像继承但专业化的行为。
template <class T> class Foo {
public:
// Обобщёная часть, которая должна быть во всех специализациях.
int some_field;
void SomeMethod(int val) {
some_field = val;
};
};
// Но при специализации общая часть пропадает.
template <> class Foo <std::string> {
public:
};
// При наследовании SomeMethod был бы доступен, а при специализации нет.
template <class T>
void SomeFunction(Foo <T> val) {
val.SomeMethod (5);
}
int main() {
Foo<string> foo;
SomeFunction(foo); // Соответственно внутри SomeFunction будет ошибка компиляции т.к. метода foo.SomeMethod не существует.
return 0;
}
你自己写的是继承——所以,也许让它继承?不是一个选择?
甚至
: public Generic太多?