native static final operator int &= ( out int A, int B );只要修改一下FScriptCompiler的GetToken()函式,增加辨識&=符號即可。
UBOOL FScriptCompiler::GetToken( FToken& Token, const FPropertyBase* Hint, UBOOL NoConsts )
{
else
{
...
if
( PAIR('<','<')
...
|| PAIR('$','=')
|| PAIR('&','=')
)
{
...
}
...
}
}
FName GAndEqual( TEXT("&=") );
不過編譯器會把符號字串轉換成FName儲存,而且只尋找而不新增名稱,所以用上一行預先把&=符號加入名稱表。接下來自訂運算子的部分其實就跟之前一樣了:
class MyOperator extends Object
ntaive;
native(233) static final operator(26) int &= ( out int A, int B );
function Test( int A, int B )
{
local int aa;
aa = A;
A &= B;
`log(A@"<="@aa@"&="@B);
}
實作碼:
IMPLEMENT_CLASS(UMyOperator);
void UMyOperator::execAddEqual_IntInt( FFrame& Stack, RESULT_DECL )
{
P_GET_INT_REF(A);
P_GET_INT(B);
P_FINISH;
*(INT*)Result = (A &= B);
}
沒有留言:
張貼留言