0

BOOST_PP_IFオブジェクトのアリティ (パラメーター数) に基づいて、ステートメントで決定を下す必要がありboost::functionます。これは可能ですか?

boost::function_types::function_arity私が探していることを実行時に実行します。コンパイル時に必要です。

4

3 に答える 3

2
function_arity

template<typename F>
struct function_arity;

Header

#include <boost/function_types/function_arity.hpp>

F

    Callable builtin type 
function_arity<F>

    Function arity as MPL - Integral Constant 
function_arity<F>::value

    Constant value of the function arity 

注、これはコンパイル時定数です

ここから始めてください: http://www.boost.org/doc/libs/1_43_0/libs/mpl/doc/index.html

または BOOST_PP_SEQ_FOR_EACH/BOOST_PP_REPEAT_FROM_TO を使用して if/else 条件を生成しますfunction_arity<F>::value

于 2010-09-15T04:56:17.410 に答える
1

何らかの理由で、私のインクルードは壊れ続けていますが、プレビューではありません =[

#include <ostream>  
#include <iostream>  
#include <boost/function.hpp>  

// Assume that you want to print out "Function is N-arity" for general case. But "nularity" for 0

template< int i >
struct DarkSide
{
template<class U>
void operator()(std::ostream& out, const U& u) { out << "Function is "<<i<<"-arity"<<u; }
void operator()(std::ostream& out, std::ostream& ( *pf )(std::ostream&) ) { out << "Function is "<<i<<"-arity"<<pf; }
};

template<>
struct DarkSide<0>
{
template<class U>
void operator()(std::ostream& out, const U& u) { out << "Function is nularity"<<u; }
void operator()(std::ostream& out, std::ostream& ( *pf )(std::ostream&) ) { out << "Function is nularity"<<pf; }
};

int main() {
typedef boost::function< void ( ) > vFv;
typedef boost::function< void ( int x ) > vFi;
DarkSide< vFv::arity >()(std::cout,"\n");
DarkSide< vFi::arity >()(std::cout,std::endl);
}
于 2010-09-15T12:22:08.597 に答える