Google CTemplate提供了調(diào)節(jié)器(Modifier)功能。所謂調(diào)節(jié)器,類似于在模板中可以使用的用戶自定義函數(shù),也就是對于相同的數(shù)據(jù)字典內(nèi)容,模板中使用不同的調(diào)節(jié)器就可以顯示不同的內(nèi)容。
要編寫一個調(diào)節(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 調(diào)節(jié)器的作用是將數(shù)值型數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制字符串顯示。其在模板中的使用如下所示:
bstr = bstr + '{{item_type3id:x-bitstring=4}}'b;
用戶自定義的調(diào)節(jié)器一般采用“x-”開頭。調(diào)節(jié)器可以帶有用戶參數(shù),例如上例的“=4”就是用戶參數(shù),表示生成的二進(jìn)制串的長度為4,如果不足4位,前面自動補(bǔ)0。
調(diào)節(jié)器的主要功能是在Modify函數(shù)中實(shí)現(xiàn)的,在該函數(shù)中調(diào)用outbuf->Emit函數(shù)來輸出所需要的結(jié)果。

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);
}
要在程序中支持調(diào)節(jié)器,還需要調(diào)用google::template_modifiers::AddModifier函數(shù)添加BitStringModifier的實(shí)例。如:

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