gpt4 book ai didi

c++ - 如何将模板定义转换为类

转载 作者:行者123 更新时间:2023-11-28 01:45:35 24 4
gpt4 key购买 nike

以下代码在没有 C++ 类(Arduino 代码)的情况下使用时有效;

MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, midiA);

这将创建一个具有正确类型的变量 midiA。宏定义为:

#define MIDI_CREATE_INSTANCE(Type, SerialPort, Name)                            \
midi::MidiInterface<Type> Name((Type&)SerialPort);

但是,我想在一个类中使用它(创建一个类变量 midiA),但我无法让它工作。

我现在拥有的是:

class MidiHandler
{
midi::MidiInterface<(HardwareSerial&) Serial1)> midiA;
}

但是,我收到以下错误:

MidiHandler.h: 23:39: error: type\value mismatch at argument 1 in template parameter list for 'template<class SerialPort, class _Settings> class midi::MidiInterface
midi*: MidiInterface<((HardwareSerial&)Serial1)> midiA

我想我可能需要将模板添加到类 MidiHandler 中,同时我想知道是否需要在构造函数中初始化它。

最佳答案

免责声明:我没有 Arduino 来编译和测试它,但从纯 C++ 的角度来看,我会在类声明中声明成员并在构造函数中初始化它。像这样:

class MidiHandler
{
public:
MidiHandler(HardwareSerial& serial_port)
: midiA(serial_port)
{ }

private:
midi::MidiInterface<HardwareSerial> midiA;
};

然后,像这样实例化类:

MidiHandler handler((HardwareSerial&) Serial1);

详细信息:

MidiHandler类有一个名为 midiA 的成员变量类型 midi::MidiInterface<HardwareSerial> ,这是一个带有一个模板参数的模板(宏中的 Type 参数)。 HardwareSerial用作模板参数的值。

类型midi::MidiInterface<HardwareSerial>有一个构造函数需要一个 HardwareSerial& 类型的参数.因此,MidiHandler::MidiHandler , MidiHandler类构造函数,需要一个相同类型的参数来构造midiA .

最后,Serial1作为构造函数参数传递给 handler . Serial1必须是 HardwareSerial& 类型或转换成它。 C 阶梯 Actor ,(HardwareSerial&) ,可能需要也可能不需要,具体取决于 Serial1 的类型,但我把它放在那里是因为宏有它。

关于c++ - 如何将模板定义转换为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45266556/

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