我想知道在boost :: bind调用中是否可以使用传递给一个可变模板的参数作为占位符.
这样的事情
template <typename ... Args> boost::bind(&function,this,anArg,_1)); //If Args count equals 1 boost::bind(&function,_1,_2)); //If Args count equals 2 boost::bind(&function,_2,_3)); //If Args count equals 3
这可能吗?
谢谢
解决方法
绝对有一种部分专业化的方式. 你的可变性不知道参数的数量吗?您必须使用编译时递归,在此期间,您可以使用boost :: mpl(或使用简单的积分常数增量计数)来堆栈参数. 那么在你最后一次非变数递归调用(使用0 arg)中,你可以在你的容器上调用mpl :: size(或者如果你选择了这个方法,你可以使用整数计数器)来调用Callable类似于另一个答案,那就是所有的参数,加上类型列表开头的一个整体模板参数.那就是你的专长.您可以根据其专门的参数数量为每个数量的参数调用调用正确的绑定. (可调用结构根据参数整数模板参数的数量(部分)进行专门化,即使Call函数使用最大数量的参数,它只包含正确的boost :: bind调用,例如bind(..,_2)用于可呼叫< 2,T1,T2,T3>) 它不可怕,但我确认我以前在C 03中使用了这种方法.