我已经看到了很多关于此的问题。有些人有答案,有些人没有,但似乎没有人能为我工作。我有这个程序(其他人写的)我希望使用。但是构造函数中存在两个问题:
template<unsigned N>
class Enumeration {
public:
Enumeration(const array<vector<pair<unsigned char, double>>, N>& pDistribution);
}
这个问题是我希望在用户定义的输入上运行这个类。这个输入决定了N的值。但是由于对于数组的N的1. const要求,因为我需要构造我将在构造函数中使用的数组和2.对于模板的const要求N,我在相当泡菜。
我试过双指针,使用代理类或constexpr空洞,似乎不起作用(取决于我是否正确使用它,我在C ++中相对较新)。
我的最后一招是通过多案例切换声明做一些非常丑陋的事情,但我希望有人可以帮助我。最好不要使用编译器的扩展名。
答案 0 :(得分:1)
您显示的类不支持在运行时确定N
。它用于不同的目的,因为在编译时可以确定N
。
在上述情况下尝试在运行时确定N
几乎肯定是个坏主意。
相反,编写类型的变体使得最外面的容器不是array
而是vector
将是在运行时确定最外层容器的大小所需的一般方法时间。
这将涉及重写大部分课程。
class Enumeration_Runtime {
public:
Enumeration_Runtime(const std::vector<std::vector<std::pair<unsigned char, double>>>& pDistribution);
};
参数的const&
可能最好转换为按值传递,但我不确定。
此处没有简单的路线,因为撰写Enumeration<N>
的人将其写入不允许N
在运行时发生变化。