boost :: bind访问器?

0 c++ boost bind boost-bind

假设我有以下代码:

int f(int, int);

int main()
{
    SomeFunc(boost::bind(f, 1, 2));
}
Run Code Online (Sandbox Code Playgroud)

从SomeFunc()函数,是否可以访问绑定类型持有的参数?像这样的东西(伪代码):

// Obvious syntax issues...
void SomeFunc(boost::bind& functor)
{
    if(functor.function == &f)
    {
        if(functor.argument1 == 1)
            DoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以从boost :: bind类型中提取这些信息吗?

Dav*_*eas 5

boost :: bind是一个模板化函数,而不是一个类型.该函数返回的实数类型是某种未指定类型的仿函数.事实上,它可能会返回许多不同的未指定类型,具体取决于boost :: bind函数的参数.

由于类型未指定且库仅声明为CopyConstructible,因此它实现了operator(),其中包含适当数量和类型的参数(每个占位符一个,从绑定方法/函数推导出的类型),并且它提供了内部类型result_type这与operator()的返回类型相同.

这些未指定的类的接口是指定的.它可能不会提供参数的访问器,即使它确实存在,并且您从研究库的内部结构中获得了内部知识,您可能会因为升级到库而导致代码中断(实现者可以自由更改类型和所有未公开记录的界面).

整个库是围绕以下事实构建的:您并不真正关心参数是什么,或者即使定义了任何参数或仅使用了占位符,您也只关心生成的对象是否可以使用给定的接口进行调用.

所以不,你不能.