之前實現的列舉類enum class雖然達到了當時期望的功能,但現在在用的時候出現了一些問題。比如新定義了乙個token的類,
定義如下,
classtoken
token(
int tp, string
tx)
int type() const
string text() const
friend ostream& operator
<< (ostream& out,const token&token)
protected
:
inttype;
string
text;
};
希望token輸出時,能夠輸出token的型別的名字,這在之前的列舉類裡面已經實現了,但是輸出語句中tokentype.name(type),直接使用了tokentype物件,如果type時exprtokentype,那麼就會出錯,除非name是static的,在tokentype和exprtokentype裡面共用。如果這樣做,name的初始化就會很麻煩,static成員需要在類外初始化,在建構函式中不能對它進行修改,那麼,繼承的exprtokentype也不能在建構函式裡面對它進行修改。這是一種解決方案,name在token對應的.cpp檔案裡面初始化,雖然目前只有main.cpp,其它的都是標頭檔案,但是不得不增加.cpp了。這樣貌似解決了,但token裡面輸出的那一句話還是有問題啊。
另一種方案,使用namespace,將tokentype定義為namespace,擴充套件的時候也不需要繼承,可以直接新增常量型別成員,而name的新增則可以放到對應lexer的初始化裡面。
//token.h
namespace
tokentype;
const
string name(intx)}
# exprtoken.h
#include
"tname.h
"namespace
tokentype}//
main.cpp
intmain()
本來應該很簡單的問題,為什麼現在搞得這麼複雜呢?
基於IP,基於port和基於網域名稱的三種
1 基於相同ip不同port的虛擬主機 2 將listen欄位改為 listen 80 listen 8888 以上設定表示使用80以及8888埠 3 更改虛擬主機部分為 documentroot var www html website1 documentroot var www html web...
基於函式的索引 建立基於函式的索引
基於函式的索引 1基於函式的索引是常規的b樹索引。2該索引存放的資料是由表中的資料應用函式後得到的,而不是直接存放表中的資料本身。3如果查詢條件包含與索引相同的函式,就可以使用基於函式的索引,提高查詢速度 舉例 測試表 create table student2 sno varchar2 10 pr...
基於Token的認證和基於宣告的標識
openid解決跨站點的認證問題,oauth解決跨站點的授權問題。認證和授權是密不可分的。而openid和oauth這兩套協議出自兩個不同的組織,協議上有相似和重合的之處,所以想將二者整合有些難度。好在openid connect作為openid的下一版本,在oauth 2.0的協議基礎上進行擴充套...