Я хочу сделать порядок функций в заголовке .h
соответствовать порядку функций в исходном файле .cpp
,
B.h
class B{
void f2(); //<--- wrong order
void f1();
};
B.cpp
#include "B.h"void B::f1(){}
void B::f2(){}
ожидаемый результат (B.h)
class B{
void f1(); //<---- nice
void f2();
};
Основной вопрос: Есть ли (полу) автоматический способ сделать (.cpp -> .h
в Visual Studio?
Горячая клавиша? Сценарий? Плагин? Visual AssistX / Resharper?
Есть похожий вопрос но он спрашивает обратный путь (у него нет решения).
Вторичный вопрос: Как сделать обратный путь (полу) автоматически? (.h -> .cpp
)
Это основная особенность. Это должно существовать, верно?
Иначе как бы поступили эксперты по поводу расстройства? Они перемещают это вручную?
Редактировать:
Во всех трех ответах говорится, что таких автоматических способов не существует, но я все еще надеюсь, что они есть.
Как указывалось в другом ответе, не существует автоматического способа сделать то, что вы хотели бы сделать.
Однако вы можете упростить этот процесс, следуя стандартам кодирования.
Прежде всего, вы спрашиваете:
Основной вопрос: Есть ли (полу) автоматический способ сделать (.cpp -> .h) в Visual Studio? Горячая клавиша? Плагин?
Я не думаю, что это правильный подход. Вы не хотите, чтобы макет вашего файла .cpp управлял макетом вашего файла .h. Файл .h — это интерфейс. Создайте макет файла .h так, чтобы он имел смысл для вас и ваших пользователей. Затем убедитесь, что файл .cpp выложен таким образом, который имеет смысл по отношению к файлу .h.
Вот один макет для .h файлов, который имеет смысл для меня.
//---------------------------------------------------------------------
/*!
\file MyClass.h
Copyright Notice
...
\author Your Name
\date 2017-Mar-01
*/
//---------------------------------------------------------------------
#pragma once
#ifndef MyClass_H
#define MyClass_H
// ********** BEGIN STANDARD INCLUDES **********
// ********** END STANDARD INCLUDES **********
// ********** BEGIN EXTERN DECLARATIONS **********
// ********** END EXTERN DECLARATIONS **********
// ********** BEGIN FORWARD DECLARATIONS **********
// ********** END FORWARD DECLARATIONS **********
// ********** BEGIN TYPEDEF DEFINITIONS **********
// ********** END TYPEDEF DEFINITIONS **********
// ********** BEGIN MACRO DEFINITIONS **********
// ********** END MACRO DEFINITIONS **********
// ********** BEGIN ENUM DEFINITIONS **********
// ********** END ENUM DEFINITIONS **********
/*!
\class MyClass
This class does this and that.
*/
class MyClass
{
public:
protected:
private:
};// ********** BEGIN INLINE FUNCTIONS **********
// ********** END INLINE FUNCTIONS **********
// ********** BEGIN EXTERN FUNCTIONS **********
// ********** END EXTERN FUNCTIONS **********
#endif
И макет для соответствующего файла .cpp:
//---------------------------------------------------------------------
/*!
\file MyClass.cpp
Copyright Notice
...
\author Your Name
\date 2017-Mar-01
*/
//---------------------------------------------------------------------
#include "MyClass.h"
// ********** BEGIN STANDARD INCLUDES **********
// ********** END STANDARD INCLUDES **********
// ********** BEGIN EXTERN DECLARATIONS **********
// ********** END EXTERN DECLARATIONS **********
// ********** BEGIN STATIC DECLARATIONS **********
// ********** END STATIC DECLARATIONS **********
// ********** BEGIN EXTERN DEFINITIONS **********
// ********** END EXTERN DEFINITIONS **********
// ********** BEGIN HELPER CLASSES **********
// Namespace for helper classes and functions used in the file.
namespace MyClassNS
{
}
using namespace MyClassNS;
// ********** END HELPER CLASSES **********
// ********** BEGIN PUBLIC FUNCTIONS **********
// ********** END PUBLIC FUNCTIONS **********
// ********** BEGIN PROTECTED FUNCTIONS **********
// ********** END PROTECTED FUNCTIONS **********
// ********** BEGIN PRIVATE FUNCTIONS **********
// ********** END PRIVATE FUNCTIONS **********
При такой компоновке будет проще убедиться, что порядок, в котором объявления функций появляются в файле .h, соблюдается в файле .cpp.
PS Вам не нужно использовать разметки в стиле Doxygen в вашем коде, если вы не используете их для автоматизации создания документации.
Это только мое мнение!
Не может быть такой функциональности по следующим причинам:
Сортировка файла * .h вызывает смешивание открытых, защищенных и закрытых методов, лучше разделить эти разделы, чем сразу видно, к какому групповому методу относится.
Вы должны указать, какой * .h файл вы хотите отсортировать, потому что в одном * .cpp вы можете иметь определения нескольких классов, которые объявлены в нескольких * .h файлах.
Вы должны указать, какой * .h файл вы хотите отсортировать, потому что * .cpp файл может иметь другое имя trom * .h
Там нет кнопки или ярлык для этого. Вы просто должны вручную переместить его, используя вырезание или обычный путь, который является выбором кода и перетащите его в нужную позицию.