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

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

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

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

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

#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