gpt4 book ai didi

c++ - 在 C++ 中,您可以在子类中扩展具有不同参数值的参数化基类吗?

转载 作者:行者123 更新时间:2023-11-27 22:31:23 26 4
gpt4 key购买 nike

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

最佳答案

如果你想问你是否可以在 C++ 中做到这一点:

template <> 
class ParamClass<Type1> : public ParamClass<Type2>
{
};

那么是的,这是可能的。

它经常被使用,例如定义模板列表或从另一个类型继承特征。

关于c++ - 在 C++ 中,您可以在子类中扩展具有不同参数值的参数化基类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com