gpt4 book ai didi

c++ - 如何将类型传递给类

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:57 24 4
gpt4 key购买 nike

我需要将一个类型传递给一个类。下面的代码有效,但我想知道这是否是执行此操作的最佳方法。有没有更好的方法?

template<typename T, typename M>
class BinaryParser
{
public:
BinaryParser(T& decoder, unsigned header_size)
: m_decoder(decoder), m_header_size(header_size) {}

virtual bool Parse() {
M message;
//do something with message
return true;
}

protected:
T& m_decoder;
unsigned m_header_size;
};

int main(int argc, char* argv[])
{
int a1, b1;
a1=1;
b1=2;
BinaryParser<int,string> bp(a1,b1);
bp.Parse();
return 0;
}

最佳答案

如果您不在子类中重新实现它,则不必将 Parse 成员函数设为虚函数(从您的示例代码看来)。相反,您可以提供一个模板方法。您可能希望要求模板参数类型具有一些已定义的接口(interface):

template <typename M>
bool Parse() {
M message; // M must be default constructable
// ... parse message from a stream or something
m_decoder.decode( message.getBytes()); // M must have getBytes() member
return message.isValid(); // M must have isValid() member
}

然后像这样使用它:

BinaryParser<int> bp(a1,b1);

if ( bp.Parse<string>()) { /* parsed */ }
if ( bp.Parse<some_other_type>()) { /* parsed */ }

关于c++ - 如何将类型传递给类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13346055/

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