gpt4 book ai didi

c++ - 是否可以将函数模板作为模板参数传递?

转载 作者:可可西里 更新时间:2023-11-01 16:05:45 29 4
gpt4 key购买 nike

假设我们有一个模板函数:

template<typename T1, typename T2, typename T3>
T3 such_fun(T1 a, T2 b) {
// do something...
}

现在我们想将它用作另一个模板中的参数,例如像那样

template<typename T1, template<typename, typename, typename> some_function>
void big_fun(T1 a) {
// some code...
a = some_function<T1, T1, T1>(a, a);
// some code...
}

这可能吗?

我知道我可以使用带有已定义 () 运算符的结构。我只是对函数感到好奇。

编辑:

当我写这个问题时,我的 friend 找到了部分解决方案:

template<typename T1, T1 (*some_function)(T1, T1)>
void big_fun(T1 a) {
// some code...
a = some_function(a, a);
// some code...
}

但仍然 - 我很好奇是否有可能在调用之前不具体化函数类型。例如 - 我可能想用各种类型组合调用传递的模板:

template<typename T1, typename T2, template<typename, typename, typename> some_function>
void big_fun(T1 a, T2 b) {
// some code...
a = some_function<T1, T1, T1>(a, a);
a = some_function<T1, T2, T1>(a, b);
b = some_function<T2, T2, T2>(b, b);
b = some_function<T2, T1, T2>(b, a);
// some code...
}

最佳答案

不,这是不可能的。来自 N3337 中的 14.3.3:

A template-argument for a template template-parameter shall be the name of a class template or an alias template, expressed as id-expression . When the template-argument names a class template, only primary class templates are considered when matching the template template argument with the corresponding parameter; partial specializations are not considered even if their parameter lists match that of the template template parameter.

第一段只明确提到了类模板。我想这也不值得麻烦,因为您已经可以使用函数或 std::function 作为参数来做一些非常相似的事情。

关于c++ - 是否可以将函数模板作为模板参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9435108/

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