作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要将一个类型传递给一个类。下面的代码有效,但我想知道这是否是执行此操作的最佳方法。有没有更好的方法?
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/
我是一名优秀的程序员,十分优秀!