首页  >  文章  >  后端开发  >  模板函数可以作为 C 中的模板参数传递吗?

模板函数可以作为 C 中的模板参数传递吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-02 18:44:02388浏览

Can Template Functions Be Passed as Template Arguments in C  ?

模板函数作为模板参数

在 C 中,可以通过函数指针或模板来实现泛型编程。虽然模板确保内联函数调用,但它们在处理泛型函数本身时面临限制。

问题陈述

考虑以下代码:

<code class="cpp">void a(int) {
    // do something
}
void b(int) {
    // something else
}

template<void (*param)(int) >
void function() {
    param(123);
    param(456);
}</code>

虽然这个模板函数简化了function1和function2之间的重复,但是当a和b本身是泛型时,就会出现问题:

<code class="cpp">template<typename T>
void a(T t) {
    // do something
}

template<typename T>
void b(T t) {
    // something else
}

template< ...param... > // ???
void function() {
    param<SomeType>(someobj);
    param<AnotherType>(someotherobj);
}</code>

解决方案:模板模板参数

为了用泛型函数 a 和 b 定义泛型函数,我们需要使用模板模板参数。但是,直接将这些函数作为类型传递是不可能的。因此,我们使用虚拟结构的解决方法:

<code class="cpp">template<typename T>
struct a {
    static void foo(T = T()) {}
};

template<typename T>
struct b {
    static void foo(T = T()) {}
};

template<template<typename P> class T>
void function() {
    T<SomeObj>::foo();
    T<SomeOtherObj>::foo();
}</code>

通过将模板模板参数指定为虚拟结构 a 和 b,我们可以实例化模板函数并在函数内调用泛型 foo 方法。

以上是模板函数可以作为 C 中的模板参数传递吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn