⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 named_params_sfinae.cpp

📁 [2005最新C++经典著作].C++ Programming.新手必看的学VC的奠基之著。
💻 CPP
字号:
// Copyright David Abrahams, Daniel Wallin 2003. 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/named_params.hpp>#include <cassert>#include <string>#include <boost/type_traits/is_convertible.hpp>#include <iostream>namespace test{  using boost::keyword;  using boost::keywords;  using boost::named_param;  struct name_t; keyword<name_t> name;  struct value_t; keyword<value_t> value;    struct f_keywords      : keywords<            named_param<                name_t              , boost::mpl::true_              , boost::is_convertible<boost::mpl::_, std::string>            >          , named_param<                value_t              , boost::mpl::true_              , boost::is_convertible<boost::mpl::_, float>            >      >  {};  template<class P>  void f_impl(P const& p)  {      std::string s = p[name | "bar"];      float v = p[value | 3.f];      assert(s == "foo");      assert(v == 3.f);  }   void f()  {      f_impl(f_keywords()());  }    template<class A0>  void f(A0 const& a0      , typename f_keywords::restrict<A0>::type = f_keywords())  {      f_impl(f_keywords()(a0));  }  template<class A0, class A1>  void f(A0 const& a0, A1 const& a1      , typename f_keywords::restrict<A0, A1>::type = f_keywords())  {      f_impl(f_keywords()(a0, a1));  }} // namespace testint main(){    using test::name;    using test::value;        using test::f;    f("foo");    f("foo", 3.f);    f(value = 3.f, name = "foo");    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -