我正在尝试在这里构建一个线程:Variable length template arguments list?的基础上,建立一个默认的Functor类,这只是学术兴趣。我的目标是构建一个通用的Functor类:给定一个类名,方法名和参数类型(可变长度),它将构建一个具有operator()方法的类,该方法接受指定模板参数类型的可变数量的参数,并接受指针并应用给定的方法。想象一下这样一个类:
class MyClass
{
public:
float Fraction( float n, int m)
{
return n/m;
}
int Increment(int n)
{
return n+1;
}
} ;
还有一个模版化的函数对象类,可以在任何函数中使用,例如:
int k = FunctorClass<MyClass, Increment, int, int /*return type*/> (3);
assert(k == 4);
float l = FunctorClass<MyClass, Fraction, float, int, float, /*return type*/> (4,3);
assert(l == (4/3));
能否构建这样的函数类? 附注:不能使用可变参数模板(在VS2010中编写,没有...模板参数) 感谢您的帮助
T&&
),并且如果函数模板的类型以右值引用作为参数,则具有特殊的模板推导规则。这允许捕获参数是如何传递的(即它是来自左值还是来自临时对象),并将其转发到包装函数中。由于可以通过传递临时对象而不进行复制来传递,因此这可以防止某些在C++2003中不可能的复制。然而,完整的讨论需要一篇相当冗长的文章。 - Dietmar Kühl