Когда я создаю новый класс С++ в visual studio 2010, он генерирует класс с некоторым кодом шаблона. Как изменить этот шаблон в соответствии с моими потребностями?
Переопределить шаблон шаблона С++ по умолчанию в visual studio 2010
Ответ 1
Одна из проблем с поиском информации об этом - большая часть информации о создании шаблонов для .NET, и для Visual С++ этот процесс отличается. Также ответ, вероятно, не тот, который вы хотите услышать, потому что он включает в себя редактирование кода JavaScript, а не просто редактирование какого-либо файла шаблона. Возможно, вы можете создать совершенно новый мастер, который использует файл шаблона, но это один из способов изменить шаблон по умолчанию, не делая этого. Изменение кода мастера включает редактирование файла javascript:
C:\Program Files\Microsoft Visual Studio 10.0\VC\VCWizards\CodeWiz\Generic\Class\Scripts\1033\default.js
В javascript используется CodeModel для управления (или генерации в этом случае) исходного кода. Внутри этого файла есть функция OnFinish
, которую вы можете использовать для изменения выводимых данных класса. Вы увидите такую строку в файле:
var newclass = oCM.AddClass(strClassName,
strHeader, vsCMAddPositionEnd, "", "", vsCMAccessDefault);
чтобы добавить новую функцию, вы сделали бы что-то вроде:
newclass.AddFunction("MyFunction", vsCMFunctionFunction,
vsCMTypeRefVoid, vsCMAddPositionEnd, vsCMAccessPublic, strImpl);
Вы можете прочитать об этом здесь:
Справочная документация:
Ответ 2
Шаблоны по умолчанию находятся в C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcprojectitems
. При необходимости измените для x86-vs-x64 и версии VS.
Ответ 3
(Если я правильно понимаю)
Я не думаю, что вы можете изменить код, который автоматически создается мастером, например, при добавлении нового класса.
Возможно, вы можете создать новый мастер? М.
Ответ 4
Проверено в MVS 2008...
Файл: C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards\CodeWiz\Generic\Class\Scripts\1033\default.js
Добавлен код (после создания по умолчанию ctor и dtor в 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"
Но я до сих пор не могу понять, как отключить реализацию в *.cpp(x.BodyText = ""; не помогает), а omitting параметр strImpl помещает реализацию в файл *.h