我试图简化(经由make_fn()
该参数进行预处理函子的产生(通过wrap()
为元数的n的成员函数。
生成函数子基本上是工作,但是到现在为止只有通过显式指定的参数类型的成员函数。
现在,我想从产生它处理的成员函数类型正确的仿函数:
struct X {};
template<class C, typename T1, bool (C::*F)(T1)>
inline // there are more for T1..TN
bool wrap(C* c, X x)
{
return (c->*F)(process<T1>(x));
}
template<class C, typename T1, bool (C::*F)(T1)>
inline // there are more for T1..TN
boost::function<bool (C*, X)> make_fn(F f) // <- problem here, F is not a type
{
return boost::bind(&wrap<C, T1, F>, _1, _2);
}
与此然而,VC ++和g ++没有看到F
作为类型的参数make_fn()
我必须在这里失去了一些东西明显和现在的感觉有点盲目。
当时的想法是,它应该像这样工作:
struct A
{
bool f1(bool) { return true; }
};
void test()
{
A a;
X x;
make_fn(&A::f1)(&a, x);
}
如何使这项工作任何想法?
背景:
我有一个固定的接口,该接口,简化时,看起来是这样的:
bool invoke(C* c, const char* const functionName, int argCount, X* args);
X是一个变量类型,我必须转换为某种后端类型(int,的std :: string,...)。
为了处理这些电话,我有地图由名称抬头一看,映射这些调用一些实例的成员函数函子。
包装的目的是为了避免手工转换,而是产生函子这对我来说还是转换throw
。 我有这个工作与基于宏观的解决方案,但解决方案需要指定类型和参数计算明确。
通过函数重载我希望从成员函数签名隐含生成正确的转换函子。