2014-07-11 51 views
3

我想在一個大型C++項目的代碼庫中找到移動構造函數。 「& &」只是簡單地匹配不起作用,因爲它匹配了很多「邏輯」和「運算符」。如何使用grep或IDE在代碼庫中查找移動構造函數?

任何方式更精確地移動構造函數grep?

任何使用Visual Studio(在Windows)或XCode(在Mac)上搜索移動構造函數的方法?

+3

使用鏘和轉儲AST(?甚至鐺查詢) –

+0

@KerrekSB,看到一個示例會很有趣,我現在問了另一個關於Clang工具的問​​題:htt p://stackoverflow.com/questions/24706053/how-to-find-move-constructors-in-codebase-using-clang-ast-tools –

回答

5

看起來像一個工作正則表達式。在Visual Studio中,按ctrl + F。在搜索彈出窗口中,激活選項「使用正則表達式」(或當搜索行處於活動狀態時,按alt + E)。然後鍵入以下公式:在指定

class_name(class_name&&) 
class_name(const class_name&&) 
class_name(volatile class_name&&) 
class_name(const volatile class_name&&) 

\b\w+\s*[\(]\s*(const)*\s*(volatile)*\s*\w+\s*[&][&]\s*[\)] 

它會找到形式的任何字符串

http://en.cppreference.com/w/cpp/language/move_constructor

表達作品也,如果有任何class_name之間的空格數,括號和像const等關鍵字的數量。

如果你想讓它也工作了命名變量,

如:

class_name(class_name&& variable_name) 

它足以稍微修改:

\b(\w+)\s*[\(]\s*(const)*\s*(volatile)*\s*\1\s*[&][&]\s*\w*\s*[\)] 

編輯:作爲一個問題的任擇議定書的要求,我已經修改上述正則表達式現在使用反向引用。 '\ 1'的意思是「查找由第一個表達式捕獲的相同表達式」 - 第一個表達式是(\ w +),這是上述示例移動構造函數中的第一個'class_name'。這確保了這個傢伙的兩邊有相同的字符串:'('。總結一下:另外一對括號'\ 1'和魔術發生了。 。提到VS支持反向引用

更多關於在Visual Studio中的正則表達式的信息可以在這裏找到:

http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx

+0

謝謝,@ user3564091! :)我也需要命名參數,但不幸的是,第二個正則表達式匹配邏輯「和」,並且它們太多了。正則表達式可以檢查(是相同的嗎?(VS是否支持這種正則表達式?)之前和之後的class_name標記?) –

+0

我修改了第二個正則表達式來使用反向引用,在VS 2013中工作得很喜歡:\ b(\ w +)\ s * [\()\ s *(const)* \ s *(volatile)* \ s *( \ 1)\ s * [&] [&] \ s * \ w * \ s * [\)] –

+0

哦,我剛剛做了同樣的更新答案:D – KjMag

相關問題