gpt4 book ai didi

c++ - 以实参作为模板形参的模板化函数指针

转载 作者:太空宇宙 更新时间:2023-11-04 12:53:00 25 4
gpt4 key购买 nike

我无法编译我的代码。我希望能够声明一个函数,该函数将另一个函数(或定义了 operator() 的类或 lambda 表达式)作为参数,并且该函数也具有模板参数。这是我想做的事情的一个例子:

template <class T, T F> 
T execF(T a, T b)
{
return F(a, b);
}

template <class T>
T add(T a, T b)
{
return a + b;
}

int main()
{
std::cout << execF<int, add>(3,4) << std::endl;
}

在 C++14 中有可能做这样的事情吗?

最佳答案

应该是:

template <class T, T F(T, T)>
T execF(T a, T b)
{
return F(a, b);
}

如果你想省略所有模板参数,我建议坚持 Some Programmer Dude 的评论并接受函数作为函数参数:

template <typename T>
T execF(T a, T b, T f(T, T))
{
return f(a, b);
}

template <typename T>
T add(T a, T b) { return a + b; }

int main(int , char **)
{
auto x = execF(41.8f, 0.2f, add); //all params deduced in both functions
std::cout << x << std::endl;

x = execF(27, 15, add); //idem
std::cout << x << std::endl;

return 0;
}

关于c++ - 以实参作为模板形参的模板化函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48059101/

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