#include<windows.h>
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;typedef map<string, string> obj;
string replace_all(const string &str, const string &find_what, const string &replace_with) {
string r = str;
string::size_type pos=0;
while((pos=r.find(find_what, pos))!=string::npos) {
r.erase(pos, find_what.length());
r.insert(pos, replace_with);
pos+=replace_with.length();
}
return r;
}
struct applier {
string& s;
applier(string& str) : s(str) {
} void operator()(pair<string, string> p) {
string search_ = "{" + p.first + "}"; // replace "{xxx}" tags
string replace_ = p.second;
s = replace_all(s, search_, replace_);
}
};class Template {
private:
string html;
public:
Template(string& html) : html(html) {
}
string apply(obj& o) {
string s = html;
for_each(o.begin(), o.end(), applier(s));
return s;
}
};//使用例子
int main(int argc, char* argv[]) { string s = "fly from {src} to {dest}"; Template t(s);// 创建模板 obj o;
o["src"] = string("beijing");
o["dest"] = string("shanghai");
cout << t.apply(o) << endl; // 显示 "fly from beijing to shanghai" o["src"] = string("shanghai");
o["dest"] = string("nanjing");
cout << t.apply(o) << endl; // 显示 "fly from shanghai to nanjing" return 0;
}C++中有无类似的模板? 这个是目前实现的,但是现在需要改进一下,让模板字符串,就是{}里的东西可以为其他形式,比如一个模板是
"fly from {src} to {dest} takes {hour} hours"
"fly from {src} to {dest} takes {hour*60} minutes"
当应用一个 src=beijing, dest=shanghai, hour==2 时候,这两个模板能分别显示
"fly from beijing to shanghai takes 2 hours"
"fly from beijing to shanghai takes 120 minutes"不知道这样的模板可否实现?
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;typedef map<string, string> obj;
string replace_all(const string &str, const string &find_what, const string &replace_with) {
string r = str;
string::size_type pos=0;
while((pos=r.find(find_what, pos))!=string::npos) {
r.erase(pos, find_what.length());
r.insert(pos, replace_with);
pos+=replace_with.length();
}
return r;
}
struct applier {
string& s;
applier(string& str) : s(str) {
} void operator()(pair<string, string> p) {
string search_ = "{" + p.first + "}"; // replace "{xxx}" tags
string replace_ = p.second;
s = replace_all(s, search_, replace_);
}
};class Template {
private:
string html;
public:
Template(string& html) : html(html) {
}
string apply(obj& o) {
string s = html;
for_each(o.begin(), o.end(), applier(s));
return s;
}
};//使用例子
int main(int argc, char* argv[]) { string s = "fly from {src} to {dest}"; Template t(s);// 创建模板 obj o;
o["src"] = string("beijing");
o["dest"] = string("shanghai");
cout << t.apply(o) << endl; // 显示 "fly from beijing to shanghai" o["src"] = string("shanghai");
o["dest"] = string("nanjing");
cout << t.apply(o) << endl; // 显示 "fly from shanghai to nanjing" return 0;
}C++中有无类似的模板? 这个是目前实现的,但是现在需要改进一下,让模板字符串,就是{}里的东西可以为其他形式,比如一个模板是
"fly from {src} to {dest} takes {hour} hours"
"fly from {src} to {dest} takes {hour*60} minutes"
当应用一个 src=beijing, dest=shanghai, hour==2 时候,这两个模板能分别显示
"fly from beijing to shanghai takes 2 hours"
"fly from beijing to shanghai takes 120 minutes"不知道这样的模板可否实现?
解决方案 »
- 新建基于CWnd的类,怎么hWnd为空?
- MFC扩展DLL装载失败~~ 求救
- error LNK2001
- 关于滚动视图,画一个很大很大很大...的图
- 100分寒风中裸求求VC++操作WORD的问题,向WORD文档中添加表,并对表操作(包括增加行)
- (高手请进)控件调用时一个很郁闷的问题
- 大家编vc,都是用wizard的?
- 急:用ADO处理大二进制字段的问题
- vs.net中是否有MicroSoft Communications Control。
- ado的connection.Execute () 中RecordsAffected 怎么用?
- 如何将一个句柄从IOCP中移除
- 有没有对递归算法很熟悉的大牛?关于扫雷!~~~~~~~~
{
printf( FLY_TIME("beijing", "shanghai", "2") );
}可否?
class xxx和define 一样简单