提升“签名”问题

时间:2010-07-16 07:40:16

标签: c++ boost

我试图弄清楚许多boost类如何能够接受函数签名作为模板参数,然后从那里“提取”结果类型,第一个参数类型等等。

template <class Signature>
class myfunction_ptr
{
   Signature* fn_ptr;
public:
   typedef /*something*/  result_type;  // How can I define this?
   typedef /*something*/  arg1_type;  // And this?
};

我知道boost还提供了一个更加可移植的实现,使用每个函数参数的模板参数,这很容易理解。 有人可以向我解释超越这个的魔力吗?

1 个答案:

答案 0 :(得分:6)

核心只是专业化和重复:

template<class S> struct Sig;

template<class R> struct Sig<R ()> {
    typedef R result_type;
};

template<class R, class T0> struct Sig<R (T0)> {
    typedef R result_type;
    typedef T0 first_type;
};

// ...