我正在研究C++ 11中的代码,并且与类构造和向量值相关的部分代码已经失控。我怎样才能使这更简洁?基类中向量的清理实例化
我的工作与版本有关,并创建了一个类型为std::vector<uint16_t>
的版本号矢量,以保存一组值代表格式为1.0.0.25
的版本。我希望所有的类都有一个版本,所以我把它放在基类中。然后孩子继承Base
并实例化版本。
目前,我的代码有一个Version类,一个Base类和一个Child类。开发人员将通过将值设置为Child类中的define变量来硬编码版本。我希望能够很容易看到和阅读。我的问题是,Child类传递值的部分目前非常难看,我希望能够使它更加简洁和易读。
的代码是:
#include <vector>
namespace CodeStuff
{
namespace VersionStuff
{
typedef uint16_t VersionType;
class Version
{
public:
Version(const std::vector<VersionType> & aNumbers, const VersionType aType = -1)
{
numbers_ = aNumbers;
type_ = aType;
}
private:
std::vector<VersionType> numbers_;
VersionType type_;
};
} // end namespace VersionStuff
} // end namespace CodeStuff
class Base
{
public:
Base(const CodeStuff::VersionStuff::Version & aVersion) : version_(aVersion)
{
}
const CodeStuff::VersionStuff::Version getVersion() const {return version_;}
private:
const CodeStuff::VersionStuff::Version version_;
};
#define CHILD_VERSION {1, 0, 0, 25}
class Child : public Base
{
public:
Child() : Base(CodeStuff::VersionStuff::Version{std::vector<CodeStuff::VersionStuff::VersionType>{CHILD_VERSION}}) {}
};
int main(int argc, const char * argv[]) {
Child myChild();
}
而我的问题是,虽然我喜欢有一个简单的方法来查看版本作为#define CHILD_VERSION {1, 0, 0, 25}
,构造函数调用是非常难看:
Child() : Base(CodeStuff::VersionStuff::Version{std::vector<CodeStuff::VersionStuff::VersionType>{CHILD_VERSION}}) {}
我想要这样做:
Child() : Base(CHILD_VERSION) {}
但是在XCode中,这会导致错误“N o匹配类型Base的初始化的构造函数“。因为这是有效的语法:
std::vector<uint16_t> v({1, 0 ,0 ,25});
我不确定为什么短期Base(CHILD_VERSION)
没有在C++ 11的工作。
我该如何缩短这个?
为什么不使用带有4个值的结构? – 2017-07-14 18:04:54
@ manni66在完整版本中,列表可以是任意长度并且处理更广泛的功能。 – Steve