Visual Studio:热键/自动对.h中的函数进行排序以与.cpp保持一致的方式

Visual Studio : hotkey/way to automatically sort functions in .h to be consistent with .cpp

本文关键字:函数 排序 方式 保持一致 cpp 热键 Studio Visual      更新时间:2023-10-16

我想使头.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();
};

问题

主要问题:在Visual Studio中有(半)自动执行(.cpp -> .h)的方法吗
热键?剧本插件?Visual AssistX/Resharper?

还有一个类似的问题,但它提出了相反的问题(没有解决方案)
次要问题:如何自动执行相反的方法(半)?(.h -> .cpp)

这是一个基本特征。它应该存在,对吧
否则,专家们将如何处理这种疾病?他们会手动移动吗?

编辑:
三个答案都表示没有这样的自动方法,但我仍然希望有。

正如另一个答案所指出的,似乎没有任何自动的方式来做你想做的事情。

但是,您可以通过遵循编码标准来简化流程。

首先,你会问:

主要问题:在Visual Studio中有(半)自动执行(.cpp->.h)的方法吗?热键?插件?

我认为这不是正确的方法。您不希望.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文件的名称可能与*.h 不同

没有按钮或快捷方式。你只需要使用剪切移动或普通方式手动移动它,即选择代码并将其拖动到你想要的位置。