На всех языках, которые я понимаю, это невозможно, но кто-то говорил мне, что это возможно в C ++, но мне трудно поверить в это. По сути, когда вы параметризируете класс, вы создаете уникальный класс на этапе компиляции, не так ли?
Дайте мне знать, если мне не ясен мой вопрос.
Вот моя попытка объяснить, что я пытаюсь сделать (обратите внимание на класс L):
//; g++ ModifingBaseClassParameter.cpp -o ModifingBaseClassParameter;ModifingBaseClassParameter
#include <iostream>
using namespace std;
template<typename T>
class Base
{
public:
Base() {}
Base(T& t) : m_t(t) {}
T& getMem() {return m_t;}
private:
T m_t;
};
template<typename T>
class F: Base<T>
{};
template<typename T>
class L: F<long>
{};
int main()
{
Base<int> i;
F<float> f;
L<long> l;
cout<<i.getMem()<<endl;
// cout<<f.getMem()<<endl; // why doesn't this work
// cout<<l.getMem()<<endl; // why doesn't this work
}
Итак, как вы можете видеть (надеюсь, мой синтаксис имеет смысл), класс L пытается переопределить параметр float своего родителя, чтобы он был длинным. Это, конечно, не кажется законным, но я буду отличаться от экспертов.