cabcd04597
This reverts commit ffb90f21b7
.
121 lines
2.7 KiB
C++
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
|