我不確定這是應該需要的,我使用了代碼生成器來生成C++代碼。 尤其是python獵豹。您基本上將直接的Python代碼嵌入到您的C++代碼中,並通過獵豹預處理器運行。與使用模板或C++預處理器相比,它允許執行相當複雜的計算,並且您可以獲得所有的Python庫和擴展。另一方面,如果出現錯誤,它會使調試更加困難。如果您有興趣,我可以提供一些示例和Emacs模式來編輯獵豹C++程序。
如果您需要的功能不夠強大,並且只想保留在C++ C中,請參閱boost預處理器,here。這需要一點時間來適應它,但可以使生活很容易,當重複代碼是參與
沒關係,我粘貼獵豹例子,給我幾分鐘:
#if defined (__INTEL_COMPILER)
#pragma vector aligned
#endif
for(int a = 0; a < $N; ++a) {
/// for functions in block
%for ii, (fi,fj) in enumerate(fb)
%set i = ii + ifb
/// can also use (ix,iy,iz)=fi[0:2], need to clean up when not lazy
%set ix = fi[0]
%set iy = fi[1]
%set iz = fi[2]
%set jx = fj[0]
%set jy = fj[1]
%set jz = fj[2]
q$(i) += Ix(a,$(ix),$(jx))*Iy(a,$(iy),$(jy))*Iz(a,$(iz),$(jz));
%end for
/// end for functions in block
}
產生(運行後cheetah ...
)
#if defined (__INTEL_COMPILER)
#pragma vector aligned
#endif
for(int a = 0; a < 6; ++a) {
q0 += Ix(a,0,1)*Iy(a,0,0)*Iz(a,0,0);
q1 += Ix(a,1,1)*Iy(a,0,0)*Iz(a,0,0);
q2 += Ix(a,0,1)*Iy(a,1,0)*Iz(a,0,0);
q3 += Ix(a,0,1)*Iy(a,0,0)*Iz(a,1,0);
q4 += Ix(a,0,0)*Iy(a,0,1)*Iz(a,0,0);
q5 += Ix(a,1,0)*Iy(a,0,1)*Iz(a,0,0);
q6 += Ix(a,0,0)*Iy(a,1,1)*Iz(a,0,0);
q7 += Ix(a,0,0)*Iy(a,0,1)*Iz(a,1,0);
q8 += Ix(a,0,0)*Iy(a,0,0)*Iz(a,0,1);
q9 += Ix(a,1,0)*Iy(a,0,0)*Iz(a,0,1);
}
這是一個常規的C++代碼
線開始%是由預獵豹解釋爲Python語句處理器。 ///是獵豹的評論。默認使用#作爲python語句,但是我改變它們以避免與C預處理器指令衝突。必須使用%end
來終止python塊。以$開頭的C++代碼中的變量被python變量替代。
你想使用boost預處理器的例子嗎?
你想生成或計算出什麼樣的東西?結構?直線功能?意大利麪代碼?狀態機? – Potatoswatter 2010-01-28 03:15:38