次のようなクラスがある場合:
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);
}
}
C
voidポインターの配列をそれぞれの型(型がで定義され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
ただし、コンパイラが「コンパイル時に変数を読み取ることができない」と文句を言うため、これはコンパイルされません。何か案は?