test/example/named_param_example.cpp
Raffi Enficiaud cabcd04597 Revert "file headers cleanup"
This reverts commit ffb90f21b7.
2015-10-08 03:17:48 +02:00

121 lines
2.7 KiB
C++

// (C) Copyright Gennadiy Rozental 2001-2014.
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org/libs/test for the library home page.
// Library Code
#include <boost/test/utils/named_params.hpp>
using namespace boost::nfp;
////////////////////////////////////////////////////////////////
// Example:
#include <iostream>
#include <boost/shared_ptr.hpp>
namespace test {
typed_keyword<char const*,struct name_t> name;
typed_keyword<int,struct test_index_t> index;
keyword<struct value_t,true> value;
keyword<struct instance_t,true> instance;
keyword<struct ref_t> ref;
template<typename ValueType>
void foo1( char const* n, ValueType v, int i )
{
std::cout << n << '[' << i << "]=" << v << std::endl;
}
template<class Params>
void foo(Params const& params)
{
int i = params[index];
foo1( params[name], params[value], i );
}
template<class Params>
void boo(Params const& params)
{
foo1( params[name], params[value], params.has(index) ? params[index] : 0 );
}
template<class Params>
void doo(Params const& params)
{
char const* nm;
if( params.has(name) )
nm = params[name];
else
nm = "abc";
foo1( nm, params[value], params.has(index) ? params[index] : 0 );
}
template<typename T>
void moo1( T* t )
{
std::cout << "non shared " << *t << std::endl;
}
template<typename T>
void moo1( boost::shared_ptr<T> const& t )
{
std::cout << "shared " << *t << std::endl;
}
template<class Params>
void moo(Params const& params)
{
moo1( params[instance] );
}
template<class Params>
void goo(Params const& params)
{
params[ref] = 6;
}
}
int main()
{
using test::foo;
using test::boo;
using test::moo;
using test::doo;
using test::goo;
using test::name;
using test::value;
using test::index;
using test::instance;
using test::ref;
foo(( name = "foo", index = 0, value = 2.5 ));
foo(( value = 'a', index = 1, name = "foo" ));
foo(( name = "foo", value = "abc", index = 1 ));
try {
foo(( name = "foo", value = "abc" ));
}
catch( nfp_detail::access_to_invalid_parameter const& ) {
std::cout << "Got access_to_invalid_parameter" << std::endl;
}
boo(( name = "boo", value = "abc" ));
boo(( name = "boo", index = 1, value = "abc" ));
doo(( value = "abc" ));
doo(( value = 1.56, name = "ytr" ));
int i = 5;
moo( instance = &i );
moo( instance = boost::shared_ptr<float>( new float(1.2) ) );
goo( ref = i );
return 0;
}
// EOF