我正在寫一個簡單的通用分析器組合庫。這意味着庫包含許多小的函數對象,稱爲解析器,這(調用時)字符串作爲輸入,並返回ParseResults作爲輸出,其中一個ParseResult是C++:使用std :: cin的多個副本?
template <typename A> using ParseResult = std::pair<A, std::string>
名單列表爲空,如果解析器做不匹配,如果匹配,則包含單個結果,並且可能會以多種(不明確)方式匹配的某些解析器可能會返回更多結果。
但是,這意味着現在正在進行大量的字符串複製。而且,在開始時,最終構造的解析器需要用字符串調用,因此所有的std::cin
(或文件的coompete內容)都被複制到一個字符串中。
什麼看起來更好一些(因爲解析器只查看字符串的當前前面的第一個(幾個)字符),是爲了跟蹤你現在在標準輸入中的位置流。我相信這正是std::istream
。但是,istreams不可複製。我的問題如何解決? 有沒有辦法返回一個istream的副本,指向原始指向的幾個字符?還是有另一種更清潔的方法來解決這個問題?
你知道C++中的引用是什麼嗎? – PiotrNycz