gpt4 book ai didi

c++ - 如何在子类中初始化静态常量成员变量?

转载 作者:太空狗 更新时间:2023-10-29 23:47:21 33 4
gpt4 key购买 nike

我正在尝试制作一个模板,它可以制作几种不同类型的类,这些类的主要区别在于事物的名称,即电阻器应输出“电阻:4欧姆”,而电容器应输出“电容:4法拉” "在同一个函数调用中,没有重载。理想情况下,单位只是静态常量 std::string 值。

我的方法是创建未初始化的基类

这里的问题是现在我必须在所有子类中重载所有不同类型的构造函数。

有没有办法只初始化子类中的静态常量变量?

谢谢

最佳答案

当前标准不允许在派生类构造函数中初始化基类的public/protected 成员。人们必须依靠其他技术来实现它。有两种方法可以解决您的问题。

(1) 声明 virtual 方法返回 std::string 以获取适当的标签/值。但是,这会造成不必要的开销。从你的实现中我可以看出你想避免它。

(2) 使用中间的 template 类,它将为您完成。

enum eValue { OHM, FARAD, AMP };  // enum to string mapping 
static const string sValue[] = { "ohm", "farad", "amp" };

// make the 'value' as reference string; to avoid making multiple copies
class Base {
Base (const string &v) : value(v) {}
public: const string &value; // has to be accessed using object
};

template<eValue TYPE>
struct Link : Base { // this is an intermediate class for every derived
Link () : Base(sValue[TYPE]) {}
};

class Resistance : public Link<OHM> {
};

关于c++ - 如何在子类中初始化静态常量成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5931564/

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