Szablony w emacsie
Wednesday, May 25th, 2005Za dużo czasu spędzam na wpisywaniu tej samej informacji w kilku różnych miejscach podczas pisania w C++.
Przykład: dodanie nowej klasy, nazywającej się - powiedzmy - NowaKlasa, do projektu to:
1\. utworzenie pliku nowa_klasa.h według wzoru:
/**
* \file nowa_klasa.h
* \brief FILLME
* \author Marcin Kaszynski
* \date 2005-05-25
*/
#ifndef _NOWA_KLASA_H_
#define _NOWA_KLASA_H_
namespace ns_obowiazujacy_w_danej_czesci_projektu
{
class NowaKlasa
{
public:
NowaKlasa();
virtual ~NowaKlasa();
protected:
};
}
#endif // _NOWA_KLASA_H_
2\. utworzenie pliku nowa_klasa.cpp według wzoru:
#ifdef _HAVE_CONFIG_H_
#include "config.h"
#endif // _HAVE_CONFIG_H_
#include "nowa_klasa.h"
namespace ns_obowiazujacy_w_danej_czesci_projektu
{
/*** NowaKlasa ***/
NowaKlasa::NowaKlasa()
{}
NowaKlasa::~NowaKlasa()
{}
}
Oba te pliki mogą zostać w całości wygenerowane na podstawie tylko tych informacji:
* nazwy NowaKlasa,
* nazwy przestrzeni nazw (namespace),
* imienia i nazwiska autora.
Z czego tylko nazwa klasy zmienia się zawsze. Nazwa namespace i dane o autorze mogłyby być definiowane przez plik konfiguracyjny umieszczony w katalogu, w którym mają być utworzone nowe pliki (lub którymś katalogu nadrzędnym) oraz wpisy w konfiguracji emacsa.
Przyglądałem się istniejącym pakietom typu skeleton i tempo, ale żaden z nich nie jest na tyle inteligentny.
Zapowiada się fajna wprawka z Elispa
