私が理解しているすべての言語では、これは不可能ですが、誰かが 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 パラメーターを long に再定義しようとしています。これは確かに合法ではないようですが、私は専門家とは異なります.