我有一个类,比如 C,其中一个成员数据,比如 X,取决于用户输入。每次运行时用户输入可能不同,在我当前的设计中,我的类的所有实例都存储对同一个对象 X 的引用。
我如何调整设计以使其允许不带参数的默认构造函数?
这样我可以使用复制赋值/复制构造函数,制作 C 数组,使用临时右值等。
以下是说明我的问题的最小工作示例。在我使用的情况下,Tag 指的是一些外部资源。
#include <iostream>
#include <string>
#include <vector>
#include <cassert>
using namespace std;
struct Tag {
int N;
string tag;
};
template<typename T>
struct Vec {
const Tag& tag;
T* vec;
Vec(const Tag& tag_) : tag(tag_) {
vec = new T[tag.N];
}
~Vec() {
delete [] vec;
}
};
Tag make_tag(vector<string>& args) {
assert(args.size() == 3);
int N = stoi(args[1]);
return Tag {N, args[2]};
}
vector<string> arguments(int argc, char* argv[]) {
vector<string> res;
for(int i = 0; i < argc; i++)
res.push_back(argv[i]);
return res;
}
int main(int argc, char* argv[]) {
vector<string> args = arguments(argc, argv);
Tag tag0 = make_tag(args);
Tag tag1;
Vec<double> vec(tag0);
return 0;
}