lu程式設計
使用c/c++給靜態型別資料新增運算子過載功能
1 說明
lu32.h,相信你會找到並正確使用這幾個檔案。
用c/c++編譯器建立乙個控制台應用程式,複製本文的例子**直接編譯執行即可。
2 關於運算子過載
在本教程系列的開始,介紹了lu指令碼的基本資料結構(詳細參考
lu程式設計指南
),即:
struct ludata;
基本資料型別
btype
決定了實際的資料結構,而擴充套件資料型別vtype決定了過載函式。若要對某資料型別vtype進行運算子過載,需要用函式
lockkey
對vtype加鎖,該函式定義如下:
int _stdcall lockkey(lukeyvtype:被鎖定的鍵的型別。vtypevtype
,void (_stdcall *deletekey)(void *),luoperator oplock);
>
lupubkey_user(公有鍵、普通鍵)或者
vtype
。deletekey
:刪除鍵值的函式指標,用於標識要加鎖的鍵。該函式由使用者定義,但由lu呼叫。若
deletekey=
null,表示解鎖指定的鍵。
oplock
:luoperator
型別的函式指標,用於物件(用指標標識)的運算子過載,該引數不可為null。解鎖和加鎖所用的
oplock
函式必須相同。參考[注1]。
如果加鎖或解鎖成功,該函式返回0,否則返回非0值。
[注1]:運算子過載函式
luoperator
函式格式如下(與lu二級函式相比,僅多了乙個引數
theoperator
):
//m指出陣列para的引數個數(也即運算元的個數,0表示1個,1表示2個,以此類推)。
//hfor為呼叫該函式的表示式控制代碼(與二級函式中的表示式控制代碼相同)。
//theoperator指出運算子的型別或操作型別:+、-、*、/、^、... ...。
ludata (_stdcall *luoperator)(luint m,ludata *para,void *hfor,int theoperator);
ludata _stdcall oplock(luint m,ludata *para,void *hfor,int theoperator)
}
如果不打算給加鎖的鍵提供運算子或函式過載功能,須使用函式
setrunerr
向lu報告執行錯誤。
本文討論使用c/c++給靜態型別資料新增運算子過載功能。本文的例子是實現c/c++中的單位元組字元型別 char(基本型別為 lustadata_int64,擴充套件型別為 key_char),但僅定義了部分運算。
3**
#include #include "lu32.h"
#pragma comment( lib, "lu32.lib" )
lukey key_char = lupoikey_user-20; //標識char的私有鍵,將對其加鎖
void _stdcall del_char(void *me) //銷毀char的函式,但什麼也不做,只為了配合運算子過載,加鎖鍵使用
ludata _stdcall oplock_char(luint m,ludata *para,void *hfor,int theoperator) //char的運算子過載函式
return a;
err:
a.btype=lustadata_nil; a.vtype=lustadata_nil; a.x=0; //引數不符合要求,返回nil
setrunerr(1,l"char 引數無法識別!",theoperator,0,hfor);
return a;
}//lu指令碼可呼叫的二級函式定義
ludata _stdcall lu_int2char(luint mm,ludata *xx,void *vfor) //將乙個整數轉換為char
else //出錯時向lu系統報告執行錯誤
return a;
}void main(void)
else
printf("c 表示式的值: %d \n",((char)800) % ((char)500));
lockkey(key_char,null,oplock_char); //在lu鍵樹中解鎖鍵
freelu(); //釋放lu
}
執行結果:
lu表示式的值: 8
c 表示式的值: 8
4函式說明
本例用到了lu的6個輸出函式:初始化
lu的函式
initlu
,釋放lu
的函式freelu,編譯表示式的函式lucom、計算表示式的函式lucal
、加鎖鍵函式
lockkey
、註冊c/c++函式的函式setfunction。從這裡檢視這些函式的說明:
lu程式設計指南。
5難點分析
在給靜態型別資料新增運算子過載功能時,需要:(1)用
lockkey
加鎖乙個鍵(本例為key_char),但不需要向lu系統註冊任何鍵值;(2)刪除鍵值的函式(本例為del_char)定義為空函式;(3)定義運算子過載函式(本例為oplock_char)。
根據函式oplock_char中定義的運算規則可知,**中的字串表示式定義為 "int2char(800) % 500" 或者 "800 % int2char(500)" 有相同的運算結果,很明顯,本例較簡單,沒有實現不同資料型別的自動轉換。
6 其他
你可能注意到了,我的****就在下面,如有不明之處或有什麼建議,可隨時與我進行聯絡。
最近更新:
2023年01月05日
給category新增基本資料型別屬性
給category新增基本資料型別屬性 通常,我們新增屬性都是通過物件擴充套件來實現的,其實,我們也可以用runtime來新增基本資料型別的屬性原始碼 uiview animationproperty.h runtimecategory created by youxianming on 15 7 ...
使用Excel批量給資料新增單引號和逗號
在使用plsql連線oracle資料庫處理資料的過程中,常用的操作是通過id查詢出資料,id需要附上單引號,如果查詢的id為一條或者幾條,我們手動新增即可,但是如果是幾百條 幾千條的話,就需要使用一些方法來進行批量處理。這裡就介紹使用excel 進行批量新增的方法。製作過程如下 a2 暫時為空,模板...
使用Excel批量給資料新增單引號和逗號
製作過程如下 a2 暫時為空,模板建立完成以後,用來放置原始資料 在b2 內輸入公式 a2 敲擊回車 解釋 b2 的公式 a2 中,表示資料左上角的單引號,在excel 中需要用雙引號將特殊字元引上 字元為連線字元,用來連線字串或者數值 a2是原始資料存放 表示在資料的右上角新增單引號 表示在資料後...