C++原型不同然后实现

gal*_*gal 1 c c++

我想知道是否有一种方法可以将.h文件编写为函数原型,并在实现中更改签名,因此它与原型略有不同.

我想要这样做的原因是因为有一些枚举类型的#include我不想在.h文件中做,但只在.c文件中,并且枚举是函数签名的一部分,所以我想知道我是否可以将枚举作为INT编写(枚举和int基本相同..)或原型中的某些东西,但后来我得到了编译错误..有一个很好的方法我可以做到吗?

提前致谢..

Spo*_*ook 6

如果我理解正确,你总是可以创建一个包装函数,例如.

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)