2009-07-20 5 views
6

Większość czasu spędzanego na opracowywaniu aplikacji C++ to marnowanie implementacji definicji klas. Mam przez to na myśli prototypowanie klas, a następnie tworzenie ich odpowiednich implementacji.Implementacja Auto Class C++ w edytorze

Na przykład:

#ifndef FOO_H 
#define FOO_H 

class Foo 
{ 
public: 
    Foo (const X& x, const Y& Y); 
    ~Foo(); 

    void PerformXYZ (int Count); 
}; 

#endif 

A teraz będę musiał kopiować i wklejać, a następnie dodać powtarzalne Foo :: na każdej funkcji.

Foo::Foo (const X& x, const Y& Y) 
{ 

} 

Foo::~Foo() 
{ 

} 

void Foo::PerformXYZ (int Count) 
{ 

} 

Na razie mogę skopiować deklaracje funkcyjnych nad do swoich plików * .cpp, usuwanie pustych wierszy, a następnie zastąpić „;” z "\ n {\ n \ n} \ n". Jednak nadal muszę określić przestrzeń nazw dla każdej funkcji.

Czy są narzędzia w Eclipse, Vimie lub innym edytorze IDE/edytorze, które odciążają tego programistę?

+0

Mężczyzna, mamy taką samą procedurę :) – GManNickG

+0

Myślisz, że coś takiego mogłoby istnieć (byłoby to bardzo przydatne). Jeśli nikt nie wymyśli odpowiedzi, powinieneś pomyśleć o napisaniu wtyczki lub programu, aby to zrobić. – Kredns

Odpowiedz

5

W Visual Studio dostępne są narzędzia do dodawania funkcji i zmiennych. Narzędzia automatyzują dany proces. Ale nigdy ich nie używam :)

W Visual Assist X znajduje się feature, który pomaga dodać implementację metod. To najlepsze rozwiązanie.

+0

+1 Wizualna pomoc. – peterchen

+0

Również ja znajduję tych pomocników GUI o ograniczonym użyciu, ponieważ mogę napisać kod szybciej niż mogę go wygenerować za pomocą tych narzędzi. To powiedziawszy, myślę, że to, co proponuje pytający, będzie oszczędnością czasu. –

2

W Visual Studio 2008 można dodać klasę (wygeneruje ona plik .h i .cpp) za pomocą opcji Projekt-> Dodaj klasę .... Ale jest bardzo prymitywny i zapisuje tylko konstruktory i destruktory. Po dodaniu klasy można przejść do widoku klas i użyć opcji menu "Dodaj metodę", aby dodać metody do klasy.

0

Można skonfigurować konfigurację Zeus editor, korzystając z funkcji szablonu w następujący sposób.

Krok 1: Tworzenie c: \ temp \ test.tpl plik, który wygląda tak:

#ifndef $Word_H 
#define $Word_H 

class $Word 
{ 
public: 
    $Word (const X& x, const Y& Y); 
    ~$Word(); 
    void PerformXYZ (int Count); 
}; 
#endif 

$Word::$Word (const X& x, const Y& Y) 
{ 
} 

$Word::~$Word() 
{ 
} 

void $Word::PerformXYZ (int Count) 
{ 
} 

Krok 2: pomocą szablonu , Opcje menu, aby dodać następujący szablon:

$ExpandTemplate<c:\temp\test.tpl> 

Krok 3: Używanie Plik, Nowy menu wpisz słowo Bar, umieść kursor na słowie Bar i uruchomić nowo utworzony szablon i masz ten tekst:

#ifndef Bar_H 
#define Bar_H 

class Bar 
{ 
public: 
    Bar (const X& x, const Y& Y); 
    ~Bar(); 
    void PerformXYZ (int Count); 
}; 
#endif 

Bar::Bar (const X& x, const Y& Y) 
{ 
} 

Bar::~Bar() 
{ 
} 

void Bar::PerformXYZ (int Count) 
{ 
} 
2

jak ty, mam dużo myśli mój czas jako programisty C++ marnuje się na pisanie żmudnych definicji klas. Jedynym narzędziem, jakie znalazłem do tej pory, że częściowo niweluje to druge-work jest VisualAssistX, jak wspominają inne plakaty.

Podczas gdy zupełnie nie trzeba całkowicie pisać definicji klas, VA X ma kilka fajnych "refaktorów", które pomagają w tym zakresie. Na przykład możesz utworzyć deklarację metody i automatycznie utworzy ona dla ciebie ciało implementacyjne. Możesz także wykonać czynności takie jak "Dodaj podobnego członka", który wypełnia okno dialogowe "dodaj członka" z danymi istniejącej metody lub zmień podpis funkcji i automatycznie ją rozpowszechniaj zarówno w plikach cpp jak i h.

To nie jest za darmo, ale warte swojej ceny.

Jeroen

1

Dla vim, jestem utrzymania this suite który zapewnia fragmenty klasy (który można łatwo dostosować do swoich potrzeb).

NB: Generowanie każdej definicji funkcji można zautomatyzować za pomocą komendy :GOTOIMPL, ale musi ona być wykonywana po funkcji.

1

Eclipse na pewno ma coś z tym związanego w menu refaktoryzacji, chociaż nie używałem go przez rok i nie pamiętam żadnych szczegółów.