如果我有一个表明
的头文件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 ::"感到有些厌倦在每次实施之前。有可能以某种方式规避这个吗?
答案 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;
它不会像类那样创建任何对象,但我认为功能应该相同。 (如果您不需要创建对象或使用该类中的任何属性)