gpt4 book ai didi

c++ - 在 C++ 中使用函数模板作为模板模板参数

转载 作者:太空狗 更新时间:2023-10-29 20:55:03 32 4
gpt4 key购买 nike

假设我有一个带有模板模板参数的函数,如下所示:

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++。有没有办法做到这一点我想念的?换句话说,将函数模板而不是类模板作为模板模板参数传递?从概念上讲,我不明白为什么它不应该成为可能。

最佳答案

您可以将指向您的函数的指针作为模板参数:

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);
}

在您的情况下,它将是:

apply_function< MyClass, some_function >(0);

然后举例。

关于c++ - 在 C++ 中使用函数模板作为模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37049079/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com