我需要为c ++

时间:2016-10-25 14:18:06

标签: c++ syntax

如果我有一个表明

的头文件
class fanStatusManager{


public:

    //default constructor
    fanStatusManager();

    public fanstatus_t setFanStatus(fanstatus_t status);

private:
    //etc
}`

和实现它们的cpp文件:

fanStatusManager::fanStatusManager(){
    //default constructor TODOi
}

fanstatus_t fanStatusManager::setFanStatus(fanstatus_t status){
     //TODO: imlement this!
     assert(false);
}

我对打字" fanStatusManager ::"感到有些厌倦在每次实施之前。有可能以某种方式规避这个吗?

3 个答案:

答案 0 :(得分:1)

如果将实现放在标题中,即可以避免输入类的名称,即

class fanStatusManager{
public:
    public fanstatus_t setFanStatus(fanstatus_t status) {
        //TODO: imlement this!
        assert(false);
    }
}

如果要单独实现成员函数,则无法解决此问题。这是因为C ++允许独立的功能,即这种语法完全有效:

fanstatus_t setFanStatus(fanstatus_t status) {
    //TODO: imlement this!
    assert(false);
}

上面定义了一个名为setFanStatus的独立函数,该函数与任何类都没有关联。

答案 1 :(得分:1)

您可以在类定义

中内联成员函数
class fanStatusManager
{

   public:

     //default constructor
      fanStatusManager()
      {
           //default constructor TODOi
      };

     fanstatus_t setFanStatus(fanstatus_t status)
     {
          //TODO: implement this!
          assert(false);
     };
  private:
     //etc
 };

这样做的缺点是,无论何时更改成员函数的实现,您都要更改定义该类的头文件。这会强制重新编译依赖于头文件的每个编译单元(也就是源文件)。

在实践中,除非您的项目非常小且是TRIVIAL(例如,所有内容都存在于单个源文件中),否则最好不要这样做,除非是非常具体的情况(例如永远不会更改的访问者)。键入fanStatusManager的工作将为每个成员函数生成一次。当你改变任何成员函数的实现时,你会看到每个源文件被重新编译,这比你将经历的时间和无聊要重要得多.....甚至编译单元实际上不使用该成员功能你已经改变了。

答案 2 :(得分:-1)

如果您不需要该类,可以将其放在命名空间

namespace fanStatusManager
{
    fanstatus_t setFanStatus(fanstatus_s status)
    {
    ...
    };
}

和 那么你只需将文件放在文件顶部

using namespace fanStatusManager;

它不会像类那样创建任何对象,但我认为功能应该相同。 (如果您不需要创建对象或使用该类中的任何属性)