関数形式マクロで引数(パラメータ)の型を固定させない方法

文字列を介した可逆的な実数・整数への型変換で、ユーザーに側に引数(パラメータ)の型を意識させない関数になりました。
文字列、実数、整数、そして変数での指定にも対応しているので、ユーザーにこの関数のためだけに別で変数を用意して代入して…と説明する煩わしさを解消できるのではないでしょうか?

デメリットとしては、型変換の基準となる引数(パラメータ)を用意しなければならないことです。
ここではユーザーに指定させる方法を採りましたが、引数が他にもある場合はそちらの型に合わせるという方法でも良いかもしれません。

文字列を介した可逆的な実数・整数への型変換で、ユーザーに側に引数(パラメータ)の型を意識させない関数になりました。
文字列、実数、整数、そして変数での指定にも対応しているので、ユーザーにこの関数のためだけに別で変数を用意して代入して…と説明する煩わしさを解消できるのではないでしょうか?

デメリットとしては、型変換の基準となる引数(パラメータ)を用意しなければならないことです。
ここではユーザーに指定させる方法を採りましたが、引数が他にもある場合はそちらの型に合わせるという方法でも良いかもしれません。

#module "test"
/*
*
*/
;================================================================================
; s1 : ()
; p1 : ()
;
#defcfunc local test_func_ str s1, int p1
/*** ***/
; vartype
if p1 = 2 {tmp_ = str(s1)} ; (str)
else:if p1 = 3 {tmp_ = double(s1)} ;
else:if p1 = 4 {tmp_ = int(s1)} ;
/*** ***/
tmp_ += tmp_ ;
return tmp_
;================================================================================
; str(local)
;
#define global ctype func(%1,%2) test_func_@test(str(%1),%2)
#global //////////// ////////////
test = func("HSP3", 2) ;
mes strf("%s\t: vartype = %d", test, vartype(test))
test = func(0.5, 3) ;
mes strf("%s\t: vartype = %d", test, vartype(test))
test = func(135, 4) ;
mes strf("%s\t: vartype = %d", test, vartype(test))
test1 = 12.5
test = func(test1, 3) ;
mes strf("%s\t: vartype = %d", test, vartype(test))
stop
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX