Previous ToC Next

140. Ruby ERB によるテンプレートメタプログラミング (2018/1/1)

1月1日より 4月1日ネタな気もしますが、、、

色々ややこしいコードをスクリプト言語で生成して、それを C や C++ の中 に埋めこんでおきたい、という時は、PHP とか使う方法もありえるかもしれま せんが Ruby だとそれ向けの ERB というものがあります。大変邪道な例です が、1つの関数記述に、「型」を渡すことでテンプレートっぽいことを可能に したのが以下の例です。

 #include <stdio.h>
 
 <%
 def add_func(type)
 a=<<EOF
 #{type} add_#{type}(#{type} a,  #{type} b)
 {
    return a+b;
 }
 EOF
 a
 end
 %>
 <%=add_func("int")%>
 <%=add_func("double")%>
 
 
 int main()
 {
    printf("%d %e\n", add_int(1,2), add_double(1.0,2.0));
 }
これを以下のスクリプト

 #!/usr/bin/ruby
 # process_erb_standalone.rb
 #
 # process erb in evhd files
 # Time-stamp: <2018-01-01 16:28:52 makino>
 #
 # Copyright Jun Makino All rights reserved.
 require "erb"
 print ERB.new(gets(nil)).result
で処理した結果は

 #include <stdio.h>
 
 
 int add_int(int a,  int b)
 {
    return a+b;
 }
 
 double add_double(double a,  double b)
 {
    return a+b;
 }
 
 
 
 int main()
 {
    printf("%d %e\n", add_int(1,2), add_double(1.0,2.0));
 }
のようになります。まあその、できます、というだけです。全くお勧めはしません。
Previous ToC Next