簡體   English   中英

在Vim中為C ++類創建getter和setter成員

[英]Create getter and setter members for a C++ class in Vim

我正在創建一個具有許多double(或其他類型,類型無關緊要)成員的類。

class CalcParameters {
public:
  CalcParameters() {}
  ~CalcParameters() {}

  // getters and setters here

private:
  double _param1;
  double _param2;
  ...
};

在Vim中是否可以編寫腳本來自動為每個參數生成公共getter和setter?

喜歡

double param1() const { return _param1; }
void setParam1(double param1) { _param1 = param1; }
...

注意事項

該代碼不是真實代碼的片段,而只是我寫來說明問題的內容。 在我的實際工作代碼上,成員被命名,設置者除了歸屬外還具有驗證邏輯。 但是,當用所有成員編寫一個框架類時,最好讓Vim為我創建基本的獲取器和設置器。 這可能嗎?

對於簡單的數據類,有時另一個不錯的選擇是使用boost::tuple (或C ++ 0x中的std::tuple ):

typedef tuple<int, char> MyDataElement;
MyDataElement data = make_tuple(1,'c');
int whatever = get<0>(data); // 1

同樣,三思而后行,您還可以考慮使用Boost Property Map

最后,對於VIM腳本,當然可以做到。 我已經進行了一些調查,您可以執行以下操作(假設您使用前綴m_標識成員變量):

:let bl = getbufline("" ,1, "$")

這將加載緩沖區的所有行,然后用包含“ m_”的行對其進行過濾:

:let xx = filter(bl, 'v:val =~ "m_.*"')

然后您可以研究如何從數組xx提取實際的變量名,依此類推。

如果這確實是您的類的外觀,則將它們按順序存儲在vector<double>並通過size_t索引向vector提供單個getter,以及單獨的paramCount()方法,使用size()測量向量的長度。

很久以前,我為此目的編寫了ftplugin

想法是鍵入;AA並回答Vim詢問您的問題。 它具有const正確性理解的原始形式(即,將復制int ,而const-ref交換string

現在,有一天我應該重寫它,因為我知道如何獲取已經寫入的數據成員的類型,以及一些旨在轉換標識符的函數 (成員<-> getter <-> setter <->參數<->局部變量<- >恆定/下划線分隔的單詞<->駱駝的上/下情況)。 las,我已經被介紹給Demeter了 ,我會盡量減少對吸氣劑和二傳手的使用,因此需要現代化ftplugin。

編輯:從那時起,我為lh-refactor插件編寫了兩種新的重構方法: Extract SetterExtract Getter 如上所述,提取方法知道如何根據成員變量的名稱來建立設置器和獲取器的名稱。

將相關數據移到private部分之外,然后移到public部分。 沒有人說所有成員數據都必須是私有的:如果它是接口的一部分,那么它應該是公共的,還有那些冗長,多余,愚蠢的獲取器和設置器。

在編程中,如果可以通過腳本來完成某事,那么就不應該這樣做。

是。 可能以這種方式使用Vim。

VimCasts有一個相關的視頻 ,描述了自動化這些過程的一種更簡單的方法,其中僅包含一個宏,標記以及一些粘貼和粘貼。

但這不是我要解決您的問題的方式。 相反,我會輸入:q! 然后重新開始。 幾乎總是,在C ++中使用getter和setter的方式很差,也不可取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM