我尋找http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/parser/Lexer.h和http://trac.webkit.org/browser/trunk/Source/JavaScriptCore/parser/Lexer.cpp
。在管線196的標題,有一段代碼理解C++模板代碼
template <bool shouldBuildIdentifiers> ALWAYS_INLINE JSTokenType parseIdentifier(JSTokenData*, unsigned lexerFlags, bool strictMode);
我可以看到一個實施本在CPP文件作爲
template <>
template <bool shouldCreateIdentifier> ALWAYS_INLINE JSTokenType Lexer<LChar>::parseIdentifier(JSTokenData* tokenData, unsigned lexerFlags, bool strictMode)
我對語法的理解是,我們定義/專業的功能型LChar的詞法分析器。它是否正確? 我讀了(Why can templates only be implemented in the header file?)這應該在頭文件中理想地完成。
也做舊的C++編譯器支持這種語法?我的是mips-linux-g ++ v 4.1.0。我得到一個「模板id不匹配任何模板聲明」
「bool仍然可以根據方法的模板進行變化,專業化是針對課程的。」這是什麼意思?返回類型是bool嗎? – jogabonito 2014-12-02 02:34:46
在這種情況下,總共有兩個模板參數。一個適用於類('T'在'模板類Lexer'),第二個是在方法('布爾shouldCreateIdentifier')。我們將'T'設置爲'LChar',但我們仍然讓'shouldCreateIdentifier'採取不同的值。這也被稱爲部分專業化。 –
2014-12-02 10:20:19
這是否意味着shouldCreateIdentifier可以有一些類型而不是bool? – jogabonito 2014-12-02 12:33:00