Visual Studio: горячая клавиша / способ автоматической сортировки функций в .h для соответствия .cpp

Я хочу сделать порядок функций в заголовке .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)

Это основная особенность. Это должно существовать, верно?
Иначе как бы поступили эксперты по поводу расстройства? Они перемещают это вручную?

Редактировать:
Во всех трех ответах говорится, что таких автоматических способов не существует, но я все еще надеюсь, что они есть.

6

Решение

Как указывалось в другом ответе, не существует автоматического способа сделать то, что вы хотели бы сделать.

Однако вы можете упростить этот процесс, следуя стандартам кодирования.

Прежде всего, вы спрашиваете:

Основной вопрос: Есть ли (полу) автоматический способ сделать (.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 в вашем коде, если вы не используете их для автоматизации создания документации.

4

Другие решения

Это только мое мнение!

Не может быть такой функциональности по следующим причинам:

  • Сортировка файла * .h вызывает смешивание открытых, защищенных и закрытых методов, лучше разделить эти разделы, чем сразу видно, к какому групповому методу относится.

  • Вы должны указать, какой * .h файл вы хотите отсортировать, потому что в одном * .cpp вы можете иметь определения нескольких классов, которые объявлены в нескольких * .h файлах.

  • Вы должны указать, какой * .h файл вы хотите отсортировать, потому что * .cpp файл может иметь другое имя trom * .h

4

Там нет кнопки или ярлык для этого. Вы просто должны вручную переместить его, используя вырезание или обычный путь, который является выбором кода и перетащите его в нужную позицию.

3