# Type-specified message keys for join_node

Note

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

## Description

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`.

## API

### Header

    #include "oneapi/tbb/flow_graph.h"

### Syntax

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.

## See Also

join_node Specification