Visual Studio:热键/自动对.h中的函数进行排序以与.cpp

时间:2017-01-11 03:38:33

标签: c++ visual-studio-2015 automated-refactoring

我想使标题.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?

a similar question,但它的方式相反(它没有解决方案) 次要问题:如何自动执行相反的方式(半)? (.h -> .cpp

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

修改
所有这三个答案都表明没有这种自动方式,但我仍然希望有这样的方式。

3 个答案:

答案 0 :(得分:4)

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

但是,您可以按照编码标准更轻松地完成此过程。

首先,你问:

  

主要问题:在Visual Studio中是否有(半)自动方式(.cpp - &gt; .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           **********

使用这样的布局,可以更容易确保.cpp文件中遵循.h文件中出现的函数声明的顺序。

PS 您不需要在代码中使用Doxygen样式标记,除非您使用它来自动生成文档。

答案 1 :(得分:4)

这只是我的意见!

由于以下原因,不能有这样的功能:

  • 排序* .h文件导致混合public,protected和private方法,更好的方法是将这些部分分开,然后立即看到哪个group方法属于。

  • 您应该告诉您要排序的* .h文件,因为在一个* .cpp中,您可以定义多个类,这些类在多个* .h文件中声明。

  • 您应该告诉哪个* .h文件要排序,因为* .cpp文件可以有不同的名称trom * .h

答案 2 :(得分:3)

没有按钮或快捷方式。您只需使用剪切移动或正常方式手动移动它,即选择代码并将其拖动到所需位置。