假设我有一个具有模板模板参数的函数,就像这样:
以上代码可以采用任意Functor类模板并应用它。例如,如果我定义了以下内容:
然后我可以进行以下调用:
理想情况下,我希望能够做到这样:
template <template <class T> class F, typename P>
void applyFunction(int param)
{
F<P> fn;
fn(param);
}
以上代码可以采用任意Functor类模板并应用它。例如,如果我定义了以下内容:
template<typename T>
struct SomeFunctor
{
void operator()(int param)
{
T::doStuff(param);
}
};
然后我可以进行以下调用:
applyFunction<SomeFunctor, MyClass>(0);
但是我真正想做的是能够传递函数模板(而不仅仅是定义函数对象的类模板)。所以,如果我有这样一个东西:
template<typename T>
void someFunction(int param)
{
T::doStuff(param);
}
理想情况下,我希望能够做到这样:
applyFunction<someFunction, MyClass>(0);
很遗憾,按照目前的标准,这不是合法的C++。是否有我忽略的方法可以实现这一点?换句话说,传递函数模板而不是类模板作为模板模板参数?从概念上讲,我不明白为什么这不可能。