Type-specified message keys for join_node


To enable this feature, define the TBB_PREVIEW_FLOW_GRAPH_FEATURES macro to 1.


The extension allows a key matching join_node to obtain keys via functions associated with its input types. The extension simplifies the existing approach by removing the need to provide a function object for each input port of join_node.



The extension adds a special constructor to the join_node interface when the key_matching<typename K, class KHash=tbb_hash_compare> policy is used. The constructor has the following signature:

join_node( graph &g )

When constructed this way, a join_node calls the key_from_message function for each incoming message to obtain the key associated with it. The default implementation of key_from_message is the following

namespace oneapi {
    namespace tbb {
        namespace flow {
            template <typename K, typename T>
            K key_from_message( const T &t ) {
                return t.key();

T is one of the user-provided types in OutputTuple and is used to construct the join_node, and K is the key type of the node. By default, the key() method defined in the message class will be called. Alternatively, the user can define its own key_from_message function in the same namespace with the message type. This function will be found via C++ argument-dependent lookup and used in place of the default implementation.