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)();