codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <iostream> #include <boost/lambda/lambda.hpp> template<class T> struct is_lambda_functor { static const bool value = false; }; // boost::lambda::_N だけの時 // T = boost::lambda::placeholder<...> template<template <class> class T> struct is_lambda_functor<boost::lambda::lambda_functor<T>> { static const bool value = true; }; // boost::lambda::_1 * boost::lambda::_2 の様に演算がある場合 // T = boost::lambda::lambda_functor_base // F = boost::lambda::arithmetic_action // A0 = boost::tuples::tuple template<template <typename, typename> class T, class F, class A> struct is_lambda_functor<typename boost::lambda::lambda_functor<T<F,A> > > { static const bool value = true; }; template<class F> bool is_lambda(F) { return is_lambda_functor<F>::value; } #include <functional> void test() { std::cout << is_lambda((boost::lambda::_1 )) << "\n"; std::cout << is_lambda((boost::lambda::_1 * 2)) << "\n"; std::cout << is_lambda((boost::lambda::_1 * boost::lambda::_2)) << "\n"; std::cout << is_lambda((boost::lambda::_1 * boost::lambda::_2 * 2* boost::lambda::_3)) << "\n"; std::cout << is_lambda(boost::lambda::unlambda(boost::lambda::_1 * 2)) << "\n"; std::cout << is_lambda(std::plus<int>()) << "\n"; } int main() { test(); }
Private
[
?
]
Run code
Submit