我想知道是否有一种方法可以将.h文件编写为函数原型,并在实现中更改签名,因此它与原型略有不同.
我想要这样做的原因是因为有一些枚举类型的#include我不想在.h文件中做,但只在.c文件中,并且枚举是函数签名的一部分,所以我想知道我是否可以将枚举作为INT编写(枚举和int基本相同..)或原型中的某些东西,但后来我得到了编译错误..有一个很好的方法我可以做到吗?
提前致谢..
如果我理解正确,你总是可以创建一个包装函数,例如.
file.h
void DoSomething(int i);
Run Code Online (Sandbox Code Playgroud)
file.cpp
void DoSomething(int i)
{
ActuallyDoSomething((MyEnum)i);
}
static void ActuallyDoSomething(MyEnum myEnum)
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
对于OOP程序,它可能如下所示:
file.h
class ISomething
{
virtual void DoSomething(int i) = 0;
};
Run Code Online (Sandbox Code Playgroud)
file.cpp
class Something : ISomething
{
private:
void ActuallyDoSomething(MyEnum myEnum)
{
// ...
}
public:
void DoSomething(int i)
{
ActuallyDoSomething((MyEnum)i);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:回应评论:我建议提供一个函数重载然后.
file.h
void DoSomething(int i);
void DoSomething(MyEnum myEnum);
Run Code Online (Sandbox Code Playgroud)
file.cpp
void DoSomething(int i)
{
DoSomething((MyEnum)i);
}
void DoSomething(MyEnum myEnum)
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
最终编辑:此解决方案应该无需使用C++ 11即可运行.
file.h
#pragma once
enum MyEnum;
void DoSomething(int i);
void DoSomething(MyEnum enum);
Run Code Online (Sandbox Code Playgroud)
FileWithMyEnum.h
#pragma once
enum MyEnum
{
One,
Two,
Three
};
Run Code Online (Sandbox Code Playgroud)
file.cpp
#include <file.h>
#include "FileWithMyEnum.h"
// Implementations
Run Code Online (Sandbox Code Playgroud)