gpt4 book ai didi

c++ - 在类中定义成员,但直到运行时才知道实际类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:26 31 4
gpt4 key购买 nike

对于普通 C++ 用户来说,这可能是一个基本问题。在功能上,我有一个 ECG 监视器,并且想选择在运行时使用哪种输出格式。我已经设置了两个公开相同方法和成员的类(ECGRecordingDefaultFormat 和 ECGRecordingEDFFormat),例如。 ->InsertMeasure, ->setFrequency, ->setPatientName 等

我知道我可以为每种格式类类型定义一个实例,然后放入:

if (ECGFormatToUse == ECGFormat.EDF) {
ecgDefaultFormat.InsertMeasure(x);
}
if (ECGFormatToUse == ECGFormat.Default) {
ecgEDFFormat.InsertMeasure(x);
}

贯穿整个代码,但我认为我可能没有完全使用 C++ 的动态类型。

问题是:我能否在 main() 中只定义一个变量,并在运行时选择我想要的格式后,让代码使用正确的类及其公开的“InsertMeasure”方法,避免一大堆 if/else 贯穿整个代码?

我很乐意只引用我应该使用的继承/多态性 (?) 的哪个方面,并且可以用谷歌搜索其余部分。

谢谢你们。

皮特

最佳答案

您可以结合 factory pattern与 C++ 的多态性。

class Base
{
virtual void InsertMeasure() = 0; //virtual pure, make the base class abstract
};

class ECGRecordingDefaultFormat : public Base
{
virtual void InsertMeasure();
};

class ECGRecordingEDFFormat : public Base
{
virtual void InsertMeasure();
};

class Factory
{
static Base* create(ECGFormat format)
{
if ( format == ECGFormat.EDF )
return new ECGRecordingEDFFormat;
if ( format == ECGFormat.Default )
return new ECGRecordingDefaultFormat;
return NULL;
}
};

int main()
{
ECGFormat format;
//set the format
Base* ECGRecordingInstance = Factory::create(format);
ECGRecordingInstance->InsertMeasure();
return 0;
}

关于c++ - 在类中定义成员,但直到运行时才知道实际类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256525/

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