模板函数作为模板参数
在 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中文网其他相关文章!