总结1:

今天找到了昨天scanf的问题答案,scanf与printf一样的神奇而复杂,稍不留神,就会被坑。
scanf函数在读入非空白符分割的多个字符串的解决方法是这个:
/* 以 | 分割 */

scanf("login|%d|%[^|]|%[^|]", &type, name, password);

总结2:
C++排错是个苦活,又无法避免减轻,不要stl也不能不用<string>吧。倒不是python宠坏了程序员,而是C++本身语法复杂,层次繁杂,过于抽象。
不过在某些方面用好c++确实比c要好用。

总结3:

文档太少,看着源码用cgicc。
登录后需要重定向,先看看cgicc是否已经做好这功能。
第一步:

grep 301 . -inr

第二步:
发现HTTPRedirect.cpp,定位到

void
cgicc::HTTPRedirectHeader::render(std::ostream& out) const
{
if(fStatus == 301)
out << "Status: 301 Moved Permanently" << std::endl;
else if(fStatus == 302)
out << "Status: 302 Found" << std::endl;
out << "Location: " << getData() << std::endl; if(false == getCookies().empty()) {
std::vector<HTTPCookie>::const_iterator iter; for(iter = getCookies().begin(); iter != getCookies().end(); ++iter)
out << *iter << std::endl;
} out << std::endl;
}

已经有实现。
第三步:
如何使用?发现render源码中有很多,直接调用吗?
感谢我课堂上学的《accelerate c++》,想起里面提到的关键字friend用于在类外实现类的输出功能。
于是猜到render()其实是重载符<<的实现者的。
第四步:
联想见过的

cout << HTTPHTMLHeader() << endl;

悟到使用方式:

cout << HTTPRedirectHeader(url) << endl;

测试成功,证实了我的想法,对cgicc的某些部分认识加深。

感悟:
第一次知道看源码去用某个库是在python世界里的,然而第一次实现这想法确实在C++里!

总结4:

cgicc不大不小,看源码很有益,适合c++已入门者。
只要看得懂,很多C++的东西瞬间找回来。
我主要看来demo/下的示例,header,cookie部分的源码。

总结5:
stl库之模板,谓词,函数对象

cgicc::const_form_iterator
cgicc::Cgicc::getElement(const std::string& name) const
{
return std::find_if(fFormData.begin(), fFormData.end(),FE_nameCompare(name));
}

跟踪FE_nameCompare()定义:

class FE_nameCompare : public std::unary_function<FormEntry, bool>
{
public: inline explicit FE_nameCompare(const std::string& name)
: fName(name) {} inline bool operator() (const FormEntry& entry) const
{ return stringsAreEqual(fName, entry.getName()); } private:
std::string fName;
};

是函数对象,用到了unary_function

template<typename _Arg, typename _Result>
struct unary_function
{
/// @c argument_type is the type of the argument
typedef _Arg argument_type; /// @c result_type is the return type
typedef _Result result_type;
};

来自stl的,目的就是类型改名,以便它的子类
equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>
使用同样类型名,因为定义stl时,Type类型名没传进去。

同时也在复习谓词,谓词在stl大量使用,比较简单,常见用函数或函数对象解决,函数对象时牵涉到上面内容。
感悟:
C++内容连贯一体,不容易啊。

 

【实习记】2014-08-15文档太少看着源码用cgicc+stl库之模板谓词函数对象的更多相关文章

  1. MYSQL在线注释文档--- 在gdb中显示源码(gdbtui使用方法)----赖明星的个人博客

    http://mingxinglai.com/cn/2013/07/gdbtui/ MySQL源码注释与类图 http://mingxinglai.com/cn/2015/08/mysql-annot ...

  2. ABBYY FineReader 15 文档转换功能

    我们平常工作的时候总会固定地只用某几个文档格式,有的人经常使用office,所以电脑内就没安装PDF阅读器,这个时候就需要文档转换器了,ABBYY FineReader 15 也能够帮助我们实现快速的 ...

  3. [BI项目记]-配置Sharepoint2013支持文档版本管理笔记

    做开发或者做方案,写文档是很重要的一个工作,我们经常需要知道文档被修改的次数,谁在什么时间修改的文档,以及在某一个版本中,都修改了哪些内容,以及不同版本的文档之间有什么差别. 如何对文档进行版本管理, ...

  4. Java知识回顾 (15) 文档注释

    说明注释允许你在程序中嵌入关于程序的信息. 你可以使用 javadoc 工具软件来生成信息,并输出到HTML文件中,使你更加方便的记录你的程序信息. javadoc 标签 标签 描述 示例 @auth ...

  5. 写文档太麻烦,试试这款 IDEA 插件吧!

    前言 每次开发完新项目或者新接口功能等,第一件事就是提供接口文档.说到接口文档,当然是用 Markdown 了.各种复制粘贴字段,必填非必填,字段备注,请求返回示例等等.简直是浪费时间哇.所以想到了开 ...

  6. ES shrink ——一般是结合rollover一起使用的,一开始没有看懂官方shrink文档,当看了这个之后就明白了

    rollover Elasticsearch 从 5.0 开始,为日志场景的用户提供了一个很不错的接口,叫 rollover.其作用是:当某个别名指向的实际索引过大的时候,自动将别名指向下一个实际索引 ...

  7. gets_s()函数的参数太少,strcpy_s():形参和实参 2 的类型不同,等c函数在Visual Studio上出现的问题, get()函数和scanf()读取字符串的区别,栈的随机性

    首先,这些C函数,在VS上要加_s后缀的原因是,这些函数存在字符串越界等问题,可以参考这篇文章,https://blog.csdn.net/silleyj/article/details/854540 ...

  8. 那些NPM文档中我看不懂地方

    $cookies.set(keyName, value[, expireTimes[, path[, domain[, secure]]]]) //return this 中括号代表可选参数 上面一行 ...

  9. 开源API文档工具- swagger2 与 smart-doc 比较 与 使用

    工具开源地址 swagger2 : https://swagger.io/ smart-doc: https://www.oschina.net/p/smart-doc  国产 两者的比较 swagg ...

随机推荐

  1. Java-String之寻根问底

    Java-String之寻根问底 引言 在java编程中,几乎每天都会跟String打交道,因此,深入理解String及其用法十分有必要.下面分三方面来详细说明下String相关的特点及用法 •Imm ...

  2. mongodb在window下和linux下的部署 和 安装可视化工具

    Windows安装    安装Mongo数据库: 在发布本文的时间官方提供的最新版本是:2.4.0 ,如果不做特殊声明,本教程所用的版本将会是这个版本. 第一步:下载安装包:http://www.mo ...

  3. hdoj 2063 过山车【匈牙利算法+邻接矩阵or邻接表】

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. hdoj 3785 寻找大富翁【优先队列+sort排序】

    寻找大富翁 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. xml基础小结

    XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的“数据库” 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签 ...

  6. PPT内嵌视频(指发布时只需要ppt一个文件即可)

    做实验时用手机拍了视频,想把视频嵌入到PPT中.只是单纯的嵌入很容易,但是我想将PPT推送给其他人时,不需要再传视频文件.搜了一下做法,可以通过flash视频格式实现.电脑为thinkpad笔记本,w ...

  7. web开发性能优化---扩展性能篇

    1.实现代码分离 一个成熟的软件开发团队一般都不会全然手写代码.这里讲的代码分离仅仅要是开发中用到的小技巧,通过底层框架+手工代码方式结合实现高速开发和高速扩展. Code目录内文件不同意改动,目录主 ...

  8. JSP中嵌入java代码的标签方式(转)

    (1)声明变量或方法 :  <%! 声明; %> :慎重使用,因为此方法定义的是全局变量 (2)java片段(scriptlet):  <% java代码; %> (3)表达式 ...

  9. Linux 安装 Python3.5

    1. 准备 操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago) Python 安装包:Python-3.5.2.tgz 下载地址:h ...

  10. Git学习笔记(一)

    刚开始学Git,记录下来,讹误之处还望指教. 安装好git之后,有两个东东,如图: git bash 表示是命令行操作. git GUI 表示是图形化操作.但是这个界面用起来不方便,另一个图形化操作工 ...