2010-12-19 76 views

回答

6

作爲「閉包對象」的C++ 0x lambdas是仿函數。所以你可以使用boost.Boost.FunctionTypes來分解它的operator()

實施例:

#include <boost/function_types/parameter_types.hpp> 

#include <boost/mpl/at.hpp> 
#include <boost/mpl/int.hpp> 

int main() 
{ 
    int x = 1; 
    auto f = [x](char a, short b, int c){ return x; }; 

    typedef decltype(f) lambda_t; 
    typedef boost::function_types::parameter_types< 
     decltype(&lambda_t::operator())>::type args_t; 
    // we can use boost::mpl::identity<decltype(f)>::type instead of lambda_t 

    static_assert(sizeof(boost::mpl::at<args_t, boost::mpl::int_<1>>::type) == 1, ""); 
} 
+0

我到底該怎麼做?我嘗試了函子本身和它的'operator()'上的parameter_types,result_type和components,但是我無法使它工作。 – ltjax 2010-12-19 13:09:34

+0

示例的Thanx。我最終從parameter_types中彈出,並將result_type添加到前端 - 就像一個魅力! – ltjax 2010-12-21 08:33:39

4

可以重載若干功能如所描述in this answer to a similar question返回想要的類型。

+0

良好的聯繫。也運作得很好,但提升方式絕對更短,更通用。 Upvote tho;) – ltjax 2010-12-21 08:34:57

相關問題