Wes McKinney created ARROW-621: ---------------------------------- Summary: [C++] Implement an "inline visitor" template that enables visitor-pattern-like code without virtual function dispatch Key: ARROW-621 URL: https://issues.apache.org/jira/browse/ARROW-621 Project: Apache Arrow Issue Type: New Feature Components: C++ Reporter: Wes McKinney
For performance-sensitive dynamic dispatch, the current visitor pattern may be suboptimal due to having two virtual function dispatches per invocation. For example, we might have: {code} ArrayVisitor* visitor = ...; RETURN_NOT_OK(array->Accept(visitor)); {code} For certain types of visitors, it may be possible to create a reusable pattern like: {code:language=c++} template <typename VISITOR> Status VisitArrayInline(const Array& array, VISITOR* visitor) { switch(array->type_id()) { case UINT8: return visitor->Visit(static_cast<const UInt8Array&>(array)); ... default: break; } return Status::NotImplemented("Array type not implemented"); } {code} It would be useful to have an understanding of how this design pattern realistically impacts performance in canonical Arrow use cases (e.g. IPC record batch loading / unloading). -- This message was sent by Atlassian JIRA (v6.3.15#6346)