62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
|
|
#include <boost/parameter.hpp>
|
|
#include <iostream>
|
|
|
|
BOOST_PARAMETER_NAME(index)
|
|
|
|
template <typename ArgumentPack>
|
|
int print_index(ArgumentPack const& args)
|
|
{
|
|
std::cout << "index = " << args[_index] << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
BOOST_PARAMETER_NAME(name)
|
|
|
|
template <typename ArgumentPack>
|
|
int print_name_and_index(ArgumentPack const& args)
|
|
{
|
|
std::cout << "name = " << args[_name] << "; ";
|
|
return print_index(args);
|
|
}
|
|
|
|
#include <boost/core/lightweight_test.hpp>
|
|
#include <boost/mpl/bool.hpp>
|
|
#include <boost/mpl/placeholders.hpp>
|
|
#include <boost/mpl/if.hpp>
|
|
#include <boost/type_traits/is_convertible.hpp>
|
|
|
|
int main()
|
|
{
|
|
int x = print_index(_index = 3); // prints "index = 3"
|
|
int y = print_name_and_index((_index = 3, _name = "jones"));
|
|
boost::parameter::parameters<
|
|
boost::parameter::required<
|
|
tag::name
|
|
, boost::mpl::if_<
|
|
boost::is_convertible<boost::mpl::_,char const*>
|
|
, boost::mpl::true_
|
|
, boost::mpl::false_
|
|
>
|
|
>
|
|
, boost::parameter::optional<
|
|
tag::index
|
|
, boost::mpl::if_<
|
|
boost::is_convertible<boost::mpl::_,int>
|
|
, boost::mpl::true_
|
|
, boost::mpl::false_
|
|
>
|
|
>
|
|
> spec;
|
|
char const sam[] = "sam";
|
|
int twelve = 12;
|
|
int z0 = print_name_and_index(spec(sam, twelve));
|
|
int z1 = print_name_and_index(spec(_index=12, _name="sam"));
|
|
BOOST_TEST(!x);
|
|
BOOST_TEST(!y);
|
|
BOOST_TEST(!z0);
|
|
BOOST_TEST(!z1);
|
|
return boost::report_errors();
|
|
}
|
|
|