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);
}
}
如何可以轉換C
陣列空指針的各自的類型(其中,其類型是在限定的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
不能在編譯時讀」。有任何想法嗎?
或間接引用指針或什麼的。關鍵是要對參數元組本身進行foreach,因爲那時索引變量將在編譯時可用。 –
你會遇到大小爲args的問題:'void'有'sizeof = 1',所以如果你用'int'(用'sizeof = 4')做這個事情,你會遇到麻煩 –
Pointers指向無效的指針都是相同的大小。 – BCS