1
0
forked from boostorg/bind

Placeholders are now inline functions to avoid data in headers (idea by Yitzhak Sapir)

[SVN r13128]
This commit is contained in:
Peter Dimov
2002-03-08 12:51:31 +00:00
parent 1dbea266a1
commit 6fb6b475db
2 changed files with 69 additions and 20 deletions

View File

@@ -146,6 +146,8 @@ public:
A1 operator[] (arg<1>) const { return a1_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -191,6 +193,9 @@ public:
A1 operator[] (arg<1>) const { return a1_; }
A2 operator[] (arg<2>) const { return a2_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -239,6 +244,10 @@ public:
A2 operator[] (arg<2>) const { return a2_; }
A3 operator[] (arg<3>) const { return a3_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
A3 operator[] (arg<3> (*) ()) const { return a3_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -290,6 +299,11 @@ public:
A3 operator[] (arg<3>) const { return a3_; }
A4 operator[] (arg<4>) const { return a4_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
A3 operator[] (arg<3> (*) ()) const { return a3_; }
A4 operator[] (arg<4> (*) ()) const { return a4_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -344,6 +358,12 @@ public:
A4 operator[] (arg<4>) const { return a4_; }
A5 operator[] (arg<5>) const { return a5_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
A3 operator[] (arg<3> (*) ()) const { return a3_; }
A4 operator[] (arg<4> (*) ()) const { return a4_; }
A5 operator[] (arg<5> (*) ()) const { return a5_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -401,6 +421,13 @@ public:
A5 operator[] (arg<5>) const { return a5_; }
A6 operator[] (arg<6>) const { return a6_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
A3 operator[] (arg<3> (*) ()) const { return a3_; }
A4 operator[] (arg<4> (*) ()) const { return a4_; }
A5 operator[] (arg<5> (*) ()) const { return a5_; }
A6 operator[] (arg<6> (*) ()) const { return a6_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -461,6 +488,14 @@ public:
A6 operator[] (arg<6>) const { return a6_; }
A7 operator[] (arg<7>) const { return a7_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
A3 operator[] (arg<3> (*) ()) const { return a3_; }
A4 operator[] (arg<4> (*) ()) const { return a4_; }
A5 operator[] (arg<5> (*) ()) const { return a5_; }
A6 operator[] (arg<6> (*) ()) const { return a6_; }
A7 operator[] (arg<7> (*) ()) const { return a7_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -524,6 +559,15 @@ public:
A7 operator[] (arg<7>) const { return a7_; }
A8 operator[] (arg<8>) const { return a8_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
A3 operator[] (arg<3> (*) ()) const { return a3_; }
A4 operator[] (arg<4> (*) ()) const { return a4_; }
A5 operator[] (arg<5> (*) ()) const { return a5_; }
A6 operator[] (arg<6> (*) ()) const { return a6_; }
A7 operator[] (arg<7> (*) ()) const { return a7_; }
A8 operator[] (arg<8> (*) ()) const { return a8_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -590,6 +634,16 @@ public:
A8 operator[] (arg<8>) const { return a8_; }
A9 operator[] (arg<9>) const { return a9_; }
A1 operator[] (arg<1> (*) ()) const { return a1_; }
A2 operator[] (arg<2> (*) ()) const { return a2_; }
A3 operator[] (arg<3> (*) ()) const { return a3_; }
A4 operator[] (arg<4> (*) ()) const { return a4_; }
A5 operator[] (arg<5> (*) ()) const { return a5_; }
A6 operator[] (arg<6> (*) ()) const { return a6_; }
A7 operator[] (arg<7> (*) ()) const { return a7_; }
A8 operator[] (arg<8> (*) ()) const { return a8_; }
A9 operator[] (arg<9> (*) ()) const { return a9_; }
template<class T> T & operator[] (value<T> & v) const { return v.get(); }
template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
@@ -916,6 +970,11 @@ template<int I> struct add_value< arg<I> >
typedef arg<I> type;
};
template<int I> struct add_value< arg<I> (*) () >
{
typedef arg<I> (*type) ();
};
template<class R, class F, class L> struct add_value< bind_t<R, F, L> >
{
typedef bind_t<R, F, L> type;
@@ -947,6 +1006,7 @@ typedef char (&_avt_r2) [2];
template<class T> _avt_r1 _avt_f(value<T>);
template<class T> _avt_r1 _avt_f(reference_wrapper<T>);
template<int I> _avt_r1 _avt_f(arg<I>);
template<int I> _avt_r1 _avt_f(arg<I> (*) ());
template<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);
_avt_r2 _avt_f(...);

View File

@@ -19,31 +19,20 @@
//
#include <boost/bind/arg.hpp>
#include <boost/config.hpp>
// With MSVC precompiled headers, unnamed namespaces are not unique
#ifdef BOOST_MSVC
# define BOOST_BIND_STATIC static
#else
# define BOOST_BIND_STATIC
#endif
namespace
{
BOOST_BIND_STATIC boost::arg<1> _1;
BOOST_BIND_STATIC boost::arg<2> _2;
BOOST_BIND_STATIC boost::arg<3> _3;
BOOST_BIND_STATIC boost::arg<4> _4;
BOOST_BIND_STATIC boost::arg<5> _5;
BOOST_BIND_STATIC boost::arg<6> _6;
BOOST_BIND_STATIC boost::arg<7> _7;
BOOST_BIND_STATIC boost::arg<8> _8;
BOOST_BIND_STATIC boost::arg<9> _9;
static inline boost::arg<1> _1() { return boost::arg<1>(); }
static inline boost::arg<2> _2() { return boost::arg<2>(); }
static inline boost::arg<3> _3() { return boost::arg<3>(); }
static inline boost::arg<4> _4() { return boost::arg<4>(); }
static inline boost::arg<5> _5() { return boost::arg<5>(); }
static inline boost::arg<6> _6() { return boost::arg<6>(); }
static inline boost::arg<7> _7() { return boost::arg<7>(); }
static inline boost::arg<8> _8() { return boost::arg<8>(); }
static inline boost::arg<9> _9() { return boost::arg<9>(); }
} // unnamed namespace
#undef BOOST_BIND_STATIC
#endif // #ifndef BOOST_BIND_PLACEHOLDERS_HPP_INCLUDED