1

如果我有如下课程:

import std.traits;

class Test(T) if(isCallable!T)
{
 alias ParameterTypeTuple!T Parameters;
 alias ReturnType!T delegate(Parameters) DelegateType;

 DelegateType m_delegate;

 void Foo(void ** arguments)
 {
  // I want to convert the void* array to
  // the respective type of each argument
  m_delegate(arguments);
 }
}

如何将Cvoid 指针数组转换为它们各自的类型(其中定义了它们的类型,Parameters并且长度arguments等于 的长度Parameters)然后调用函数?

我尝试使用如下元组来执行此操作:

void Foo(void ** arguments)
{
 Tuple!(Parameters) tuple;

 foreach(index; 0 .. Parameters.length)
 {
  // Copy each value to the tuple
  tuple[index] = *(cast(Parameters[index]*) arguments[index]);
 }

 // Call the function using the tuple (since it expands to an argument list)
 m_delegate(tuple);
}

但这不会编译,因为编译器抱怨“index在编译时无法读取变量”。有任何想法吗?

4

1 回答 1

3

沿着这些思路做一些事情:

ParameterTypeTuple!T args;

foreach(i, arg; args) {
    args[i] = cast(typeof(arg)) arguments[i];
}

你应该开始

于 2012-11-14T02:02:39.953 回答