在我理解的所有语言中,这是不可能的,但有人告诉我这在 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。这当然看起来不合法,但我会与专家不同。