Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 在数组的元组上迭代_Templates_D - Fatal编程技术网

Templates 在数组的元组上迭代

Templates 在数组的元组上迭代,templates,d,Templates,D,我试图迭代不同类型数组的元组,用每个元素调用一个函数。我当前的实现如下所示: // Some T... is defined up here. // ArrayTuple!(T) is a TypeTuple of arrays of each type in T. ArrayTuple!(T) data; void iterate(alias func, uint n = 0)() { static if(n < T.length) { foreach(

我试图迭代不同类型数组的元组,用每个元素调用一个函数。我当前的实现如下所示:

// Some T... is defined up here.

// ArrayTuple!(T) is a TypeTuple of arrays of each type in T.
ArrayTuple!(T) data;
void iterate(alias func, uint n = 0)()
{
    static if(n < T.length)
    {
        foreach(elem; data[n])
            func(elem);

        iterate!(func, n + 1)();
    }
}

在大多数情况下效果很好,但是不能为
func
传递委托模板。对支持带有堆栈指针的模板函数的实现有何建议?

委托参数的类型是什么?您不能获取方法模板的地址并获取委托-您需要使用类型对其进行实例化。

关键是,它有多种不同的类型,取决于T中的类型。这就是为什么它被作为模板别名参数而不是函数指针或委托传递。那么,你是在问如何使用模板化方法来实现这一点吗?从“具有堆栈指针的函数”判断,我猜“否”。我不太确定您想要实现什么-嵌套函数无法模板化,您需要通过别名传递模板,以允许
迭代
以任意类型实例化它。为什么不能模板化嵌套函数?我使用的是模板嵌套函数。无论如何,
iterate
需要接收要实例化的模板和委托的上下文。D本身不为委托堆栈上下文提供类型,因此您无法真正构造委托或为静态函数传递指向上下文的指针。D程序员不确定,可能会有所帮助
void foo(T)(T elem)
{
    ...
}

iterate!(foo)();