Использование BOOST_STRONG_TYPDEF создает новый тип, где в качестве библиотеки параметров буста используется для присвоения имен параметрам.Это позволяет вам быть более ясным с тем, что берут ваши функции.Например (из документации по бусту)
#include <boost/parameter/preprocessor.hpp>
namespace graphs
{
BOOST_PARAMETER_FUNCTION(
(void), // 1. parenthesized return type
depth_first_search, // 2. name of the function template
tag, // 3. namespace of tag types
(required (graph, *) ) // 4. one required parameter, and
(optional // four optional parameters, with defaults
(visitor, *, boost::dfs_visitor<>())
(root_vertex, *, *vertices(graph).first)
(index_map, *, get(boost::vertex_index,graph))
(in_out(color_map), *,
default_color_map(num_vertices(graph), index_map) )
)
)
{
// ... body of function goes here...
// use graph, visitor, index_map, and color_map
}
}
Позволяет вам явно сказать, что ожидается, почти как в проекте по контракту.Однако я считаю, что это усложняет читабельность вашего кода настолько, что этого не стоит делать.
Лично я предпочитаю использовать BOOST_STRONG_TYPEDEF, так как он создает новые типы ", которые можно использовать для сопоставления параметров функции или шаблона" (снова из документации буста).