2011-02-18 44 views
10

當我創建在Visual Studio 2010中一個新的C++類,它會產生一些模板代碼的類。我如何修改這個模板以適應我自己的需求?覆蓋默認的C++在Visual Studio類模板2010

+0

我沒有用它生成的默認代碼爲我的一個問題。我想修改它生成的默認代碼。 – brainydexter

+1

你檢查這個文件夾:微軟的Visual Studio 10.0 \ VC \ VCWizards \ CodeWiz \一般\ –

回答

1

默認的模板是C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcprojectitems。適合於x86-vs-x64和VS版本。

+0

類我看到在該目錄 「NEWC++ file.cpp /小時」。但是,他們都是空的。大小是0KB。我是否需要修改嚮導文件?我甚至打開「addmC++ componentclass.vsz」來查看是否有我可以編輯的東西,但它沒有任何類似於生成的模板代碼的東西。 – brainydexter

+0

@Roger當您選擇「添加類」菜單選項時,您可以更清楚地瞭解您需要修改以修改「通用C++類嚮導」生成的類的內容嗎? – User

+0

'vcprojectitems'中的東西控制你從** Project/Add New Item **中看到的東西(以及生成的東西)。在C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ VC \ VCWizards \ CodeWiz \ Generic \ Class \ Scripts \ 1033 \ default.js中定義了'Add Class' C++嚮導,它使用'EnvDTE。 CodeModel'來做實際的代碼生成。我看不到取代此功能的方法。你總是可以寫一個簡單的VS擴展來替換你自己的菜單項,儘管... –

0

(如果我理解正確)

我不認爲增加一個新的類時,你可以修改由嚮導自動生成的代碼,例如。

也許你可以編寫一個新的嚮導? ,查清這個信息 M.

3

的一個問題是大多數有關創建模板的信息是.NET和過程是Visual C++不同。此外,答案可能不是你想聽到的,因爲它涉及編輯JavaScript代碼,而不僅僅是編輯一些模板文件。您可以創建一個全新的使用模板文件的嚮導,但這是修改默認模板的一種方法。修改嚮導代碼涉及編輯JavaScript文件:

C:\ Program Files文件\微軟的Visual Studio 10.0 \ VC \ VCWizards \ CodeWiz \一般\類\腳本\ 1033 \ default.js

JavaScript的使用CodeModel來操縱(或在這種情況下生成)源代碼。在該文件中有一個OnFinish函數,您可以使用該函數修改輸出的類詳細信息。你會看到這樣一行在文件中:

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

添加新的功能,你會做這樣的事情:

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

你可以閱讀一下:

Inside Visual C++ Wizards

參考文獻:

Designing a Wizard

0

經過2008年的MVS ...

文件:C:\ Program Files文件\微軟的Visual Studio 9.0 \ VC \ VCWizards \ CodeWiz \一般\類\腳本\ 1033 \ 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" 

但(創建默認構造函數在default.js &析構函數後)我仍然無法弄清楚如何關閉實施*的.cpp(x.BodyText =「」;沒有幫助),並省略strImpl參數提出實施中的* .h文件