我有 2 个派生自相同 API 的类, 并且希望能够对它们使用相同的 API,两者之间的唯一区别是我需要将定义放在 API 之外,这将确定 union 函数返回的结果中的某些内容。
我的设计有问题,我继承了这个 API,我无法更改它。
源.cpp
#include <fstream>
#include <vector>
#include "Version100.h"
#include "Version200.h"
int main()
{
Version100* ver100 = new Version100();
int res = ver100->PlusOne(2);
Version200* ver200 = new Version200();
res = ver200->PlusOne(2);
}
VersionAPI.h - 这是我继承的 API 我无法更改此实现
#pragma once
class VersionAPI
{
public:
VersionAPI(void);
~VersionAPI(void);
int PlusOne(int number);
};
VersionAPI.cpp - 我遇到的问题是我需要为每个类使用不同的 VERSION 定义
#include "VersionAPI.h"
VersionAPI::VersionAPI(void)
{
}
VersionAPI::~VersionAPI(void)
{
}
int VersionAPI::PlusOne(int number)
{
return number + VERSION;
}
Version100.h
#pragma once
#define VERSION 100
#include "VersionAPI.h"
class Version100 :
public VersionAPI
{
public:
Version100(void);
~Version100(void);
};
Version100.cpp
#include "Version100.h"
Version100::Version100(void)
{
}
Version100::~Version100(void)
{
}
Version200.h
#pragma once
#define VERSION 200
#include "versionapi.h"
class Version200 :
public VersionAPI
{
public:
Version200(void);
~Version200(void);
};
Version200.cpp
#include "Version200.h"
Version200::Version200(void)
{
}
Version200::~Version200(void)
{
}
我得到的错误是:
ersionapi.cpp(16): error C2065: 'VERSION' : undeclared identifier
我知道这是因为 VERSION 是在类之外定义的。
最佳答案
您可以保持 API 的公共(public)部分不变,并添加一个返回版本的 private
虚函数。版本本身可以是一个 static
成员,它对于每个派生类型都是不同的,或者只是一个从 version()
虚函数返回的值:
class VersionAPI
{
public:
VersionAPI();
virtual ~VersionAPI(); // Don't forget the virtual derstuctor!!!
int PlusOne(int number) const // mark "final" in C++11
{
return version() + number;
}
private:
virtual int version() const { return 123; }
};
然后在派生类型中实现version() const
,返回相关的版本号。
class Version200 : public VersionAPI
{
public:
Version200();
~Version200();
private:
virtual int version() const { return 200; }
};
关于c++ - 在 C++ 中为派生类定义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23876413/