Google CTemplate提供了調節(jié)器(Modifier)功能。所謂調節(jié)器,類似于在模板中可以使用的用戶自定義函數,也就是對于相同的數據字典內容,模板中使用不同的調節(jié)器就可以顯示不同的內容。
要編寫一個調節(jié)器,需要從template_modifiers::TemplateModifier派生一個類:

Code
class BitStringModifier : public template_modifiers::TemplateModifier {
void Modify(const char* in, size_t inlen,
const ctemplate::PerExpandData* per_expand_data,
ExpandEmitter* outbuf, const std::string& arg) const;
};
BitString 調節(jié)器的作用是將數值型數據轉換為二進制字符串顯示。其在模板中的使用如下所示:
bstr = bstr + '{{item_type3id:x-bitstring=4}}'b;
用戶自定義的調節(jié)器一般采用“x-”開頭。調節(jié)器可以帶有用戶參數,例如上例的“=4”就是用戶參數,表示生成的二進制串的長度為4,如果不足4位,前面自動補0。
調節(jié)器的主要功能是在Modify函數中實現的,在該函數中調用outbuf->Emit函數來輸出所需要的結果。

Code
void BitStringModifier::Modify(const char* in, size_t inlen,
const ctemplate::PerExpandData* per_expand_data,
ExpandEmitter* outbuf, const std::string& arg) const
{
int x = atoi(string(in, inlen).c_str());
unsigned int len = atoi(arg.c_str() + 1);
string sID = itoa(x, 2);
while(sID.size() < len)
sID = "0" + sID;
outbuf->Emit(sID);
}
要在程序中支持調節(jié)器,還需要調用google::template_modifiers::AddModifier函數添加BitStringModifier的實例。如:

Code
BitStringModifier bitStringModifier;
/// 注冊自定義的Modifier
google::template_modifiers::AddModifier("x-bitstring=", &bitStringModifier);
posted on 2008-10-15 22:03
zealsoft 閱讀(1486)
評論(0) 編輯 收藏 引用 所屬分類:
編譯器設計