假设我有以下代码:
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类型中提取这些信息吗?
boost :: bind是一个模板化函数,而不是一个类型.该函数返回的实数类型是某种未指定类型的仿函数.事实上,它可能会返回许多不同的未指定类型,具体取决于boost :: bind函数的参数.
由于类型未指定且库仅声明为CopyConstructible,因此它实现了operator(),其中包含适当数量和类型的参数(每个占位符一个,从绑定方法/函数推导出的类型),并且它提供了内部类型result_type这与operator()的返回类型相同.
这些未指定的类的接口是未指定的.它可能不会提供参数的访问器,即使它确实存在,并且您从研究库的内部结构中获得了内部知识,您可能会因为升级到库而导致代码中断(实现者可以自由更改类型和所有未公开记录的界面).
整个库是围绕以下事实构建的:您并不真正关心参数是什么,或者即使定义了任何参数或仅使用了占位符,您也只关心生成的对象是否可以使用给定的接口进行调用.
所以不,你不能.
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |