我正试图在这里构建线程:Variable length template arguments list? 有一个默认的函子类,这只是学术上的兴趣。我的目标是构建一个通用的Fucntor类:给定类名称,方法名称和参数类型(可变长度),它构建一个具有operator()方法的类,该方法接受模板参数中指定类型的可变数量的参数,需要一个指针并应用给定的方法。想象一下,一类这样的:C++中的通用函数类
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中建立,没有...模板参数) 感谢您的帮助
谢谢你经过深思熟虑的答案。是的,我的情况是针对非静态成员,并且必须发送对象。 您能否详细介绍一下:另外,如果没有右值引用,您将无法获得完美的转发。 ? 再次感谢 – user1186270 2012-02-19 17:30:49
如果函数模板将右值引用作为参数,那么C++ 2011支持rvalues引用(某些类型为'T'拼写'T &&')和特殊模板推导规则。这允许捕获参数如何传递(即它是来自左值还是来自临时值)并将其转发给包装函数。由于临时文件可以在不复制的情况下传递,因此可以防止某些C++ 2003无法实现的副本。但是,充分的讨论是一篇相当长的文章。 – 2012-02-19 22:46:50
@ user1186270:Dietmar是对的。这确实会造成一篇相当长的文章。幸运的是,有人已经在这里写下了它:http://blogs.msdn.com/b/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx – ForeverLearning 2012-02-23 22:10:52