Sme*_*eey 4 c++ templates c++11
假设我有一个带有模板模板参数的函数,如下所示:
template <template <class T> class F, typename P>
void applyFunction(int param)
{
F<P> fn;
fn(param);
}
Run Code Online (Sandbox Code Playgroud)
以上可以为 Functor 获取任意类模板并应用它。例如,如果我定义:
template<typename T>
struct SomeFunctor
{
void operator()(int param)
{
T::doStuff(param);
}
};
Run Code Online (Sandbox Code Playgroud)
然后我可以拨打以下电话:
applyFunction<SomeFunctor, MyClass>(0);
Run Code Online (Sandbox Code Playgroud)
但我真正想做的是能够传递函数模板(而不仅仅是定义函子的类模板)。所以如果我有这样的事情:
template<typename T>
void someFunction(int param)
{
T::doStuff(param);
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以做这样的事情:
applyFunction<someFunction, MyClass>(0);
Run Code Online (Sandbox Code Playgroud)
不幸的是,目前这不是合法的 C++。有没有办法做到这一点,我失踪了?换句话说,传递函数模板而不是类模板作为模板模板参数?从概念上讲,我不明白为什么它不应该是可能的。
您可以将指向您的函数的指针作为模板参数:
template < typename T, T (*F)(int) >
void apply_function(int param) {
F(param);
}
template < typename T >
T some_function(int param) {
T::doStuff(param);
}
int main() {
apply_function< float, some_function >(5);
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,它将是:
apply_function< MyClass, some_function >(0);
Run Code Online (Sandbox Code Playgroud)
那么例如。
| 归档时间: |
|
| 查看次数: |
1993 次 |
| 最近记录: |