2011-02-18 5 views
10

Quando creo una nuova classe C++ in Visual Studio 2010, viene generata una classe con un codice di modello. Come posso modificare questo modello per adattarlo alle mie esigenze?sovrascrive il modello di classe C++ predefinito in Visual Studio 2010

+0

Non ho problemi con la generazione di codice di default per me. Voglio modificare il codice predefinito che genera. – brainydexter

+1

Avete controllato questa cartella: Microsoft Visual Studio 10.0 \ VC \ VCWizards \ CodeWiz \ Generic \ Class –

risposta

1

I modelli predefiniti sono in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcprojectitems. Cambia come appropriato per la versione x86-vs-x64 e VS.

+0

vedo un "newC++ file.cpp/h" in quella directory. Ma sono entrambi vuoti. La dimensione è 0 KB. Devo modificare i file della procedura guidata? Ho persino aperto "addmC++ componentclass.vsz" per vedere se c'è qualcosa che posso modificare lì, ma non aveva nulla di simile al codice del template che viene generato. – brainydexter

+0

@Roger puoi essere un po 'più esplicito su cosa avresti bisogno di modificare per modificare la classe generata dalla "Procedura guidata di classe C++ generica" ​​quando scegli l'opzione di menu "Aggiungi classe"? – User

+0

Il contenuto di 'vcprojectitems' controlla ciò che vedi (e ciò che viene generato) da ** Progetto/Aggiungi nuovo elemento **. Il wizard C++ 'Add Class' è definito in' C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ VCWizards \ CodeWiz \ Generic \ Class \ Scripts \ 1033 \ default.js', e usa 'EnvDTE. CodeModel' per fare la generazione del codice reale. Non riesco a vedere un modo per sostituire questa funzionalità. Puoi sempre scrivere una semplice estensione VS per sostituire questa voce di menu con la tua, anche se ... –

0

(se ho capito bene)

Non credo che è possibile modificare il codice che viene generato automaticamente da un mago, per esempio quando si aggiunge una nuova classe.

Potresti forse programmare un nuovo wizard? M.

3

Un problema con la ricerca di informazioni su questa è la maggior parte delle informazioni sulla creazione di modelli è per .NET e il processo è diverso per Visual C++. Anche la risposta probabilmente non è ciò che vuoi sentire perché riguarda la modifica del codice javascript piuttosto che la modifica di alcuni file modello. È possibile che tu possa creare una procedura guidata completamente nuova che utilizza un file modello, ma questo è un modo per modificare il modello predefinito senza farlo. Modifica del codice di procedura guidata comporta la modifica di un file javascript:

C: \ Programmi \ Microsoft Visual Studio 10.0 \ VC \ VCWizards \ CodeWiz \ Generico \ Class \ Scripts \ 1033 \ Default.js

Il javascript utilizza il CodeModel per manipolare (o generare, in questo caso) il codice sorgente. All'interno di quel file c'è una funzione OnFinish che puoi usare per modificare i dettagli della classe che vengono emessi. Si vedrà una linea come questa nel file:

var newclass = oCM.AddClass(strClassName, 
strHeader, vsCMAddPositionEnd, "", "", vsCMAccessDefault); 

per aggiungere una nuova funzione si dovrebbe fare qualcosa di simile:

newclass.AddFunction("MyFunction", vsCMFunctionFunction, 
vsCMTypeRefVoid, vsCMAddPositionEnd, vsCMAccessPublic, strImpl); 

Si può leggere su di esso qui:

Inside Visual C++ Wizards

Documentazione di riferimento:

Designing a Wizard

0

Controllato in MVS del 2008 ...

File: C: \ Programmi \ Microsoft Visual Studio 9.0 \ VC \ VCWizards \ CodeWiz \ Generico \ Class \ Scripts \ 1033 \ Default.js

codice aggiunto (dopo la creazione di default ctor & dtor nelle Default.js)

var oCopyCtor = newclass.AddFunction(strClassName+"(const "+strClassName+"& refObj)", vsCMFunctionConstructor, "", vsCMAddPositionEnd, vsCMAccessPrivate, strImpl); 
    var oAssignmentOperator = newclass.AddFunction("operator=(const "+strClassName+"& rhs)", vsCMFunctionOperator, strClassName+"&", vsCMAddPositionEnd, vsCMAccessPrivate, strImpl); 

    oAssignmentOperator.BodyText = "if(&rhs == this) { return *this; }\n//TODO: real assignment here...\nreturn *this;\n" 

Ma io ancora non riesco a capire come disattivare implementazione in * cpp (x.BodyText = ""; non aiuta), e omettendo il parametro strImpl mette l'implementazione nel file * .h

Problemi correlati