ntp.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 111 行
CPP
111 行
// Copyright Daniel Wallin 2006. Use, modification and distribution is// subject to 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)#include <boost/parameter.hpp>#include <boost/mpl/assert.hpp>#include <boost/type_traits/is_same.hpp>#include <boost/type_traits/is_base_and_derived.hpp>namespace mpl = boost::mpl;namespace parameter = boost::parameter;template <class T = int>struct a0_is : parameter::template_keyword<a0_is<>, T>{};template <class T = int>struct a1_is : parameter::template_keyword<a1_is<>, T>{};template <class T = int>struct a2_is : parameter::template_keyword<a2_is<>, T>{};template <class T = int>struct a3_is : parameter::template_keyword<a3_is<>, T>{};struct X {};struct Y : X {};template < class A0 = parameter::void_ , class A1 = parameter::void_ , class A2 = parameter::void_ , class A3 = parameter::void_>struct with_ntp{ typedef typename parameter::parameters< a0_is<>, a1_is<>, a2_is<> , parameter::optional< parameter::deduced<a3_is<> > , boost::is_base_and_derived<X, mpl::_> > >::bind<A0,A1,A2,A3#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) , parameter::void_#endif >::type args; typedef typename parameter::binding< args, a0_is<>, void* >::type a0; typedef typename parameter::binding< args, a1_is<>, void* >::type a1; typedef typename parameter::binding< args, a2_is<>, void* >::type a2; typedef typename parameter::binding< args, a3_is<>, void* >::type a3; typedef void(*type)(a0,a1,a2,a3);};BOOST_MPL_ASSERT((boost::is_same< with_ntp<>::type, void(*)(void*,void*,void*,void*)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<a2_is<int> >::type, void(*)(void*,void*,int,void*)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<a1_is<int> >::type, void(*)(void*,int,void*,void*)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<a2_is<int const>, a1_is<float> >::type, void(*)(void*,float,int const,void*)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<int const>::type, void(*)(int const, void*, void*,void*)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<int, float>::type, void(*)(int, float, void*,void*)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<int, float, char>::type, void(*)(int, float, char,void*)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<a0_is<int>, Y>::type, void(*)(int,void*,void*, Y)>));BOOST_MPL_ASSERT((boost::is_same< with_ntp<int&, a2_is<char>, Y>::type, void(*)(int&,void*,char, Y)>));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?