【发布时间】:2018-07-21 08:05:12
【问题描述】:
我有以下代码的更复杂的版本:
#include <array>
#include <cmath>
using namespace std;
class Dummy
{
public:
Dummy(const double a, const double f)
{
//Some complex calculations
}
};
constexpr double values[] { 0.1, 0.2, 0.3, 0.4 };
constexpr auto N = sizeof(values) / sizeof(values[0]);
static const array<Dummy, N> dummies {Dummy(10 * values[0], M_PI * 0),
Dummy(10 * values[1], M_PI * 1),
Dummy(10 * values[2], M_PI * 2),
Dummy(10 * values[3], M_PI * 3)};
int main()
{
//Complex use of dummies
return 0;
}
我想简化dummies 数组的初始化,因为它是高度冗余的。但是,我绑定到 C++11,我无法将 Dummy 类更改为具有 constexpr 构造函数(这将大大简化我的情况)。
我查看了可变参数模板,但似乎无法解决Dummy 的构造函数不是constexpr 的事实:
template<size_t... Is>
struct _Helper
{
static constexpr array<Dummy, N> dummies {Dummy(10 * values[Is], M_PI * Is)...}; //Fails to compile because Dummy's constructor is not constexpr
};
static const array<Dummy, N> dummies { _Helper<0, 1, 2, 3>::dummies };
还有其他方法可以简化数组的初始化吗? values 可以被重新声明为其他任何可以在运行时转换回 double[] 的东西。
【问题讨论】:
-
Dummy有默认构造函数吗? -
@Nelfeal:不,不幸的是,它没有。
-
真实代码中你也有4个假人吗?
-
@HolyBlackCat:我有几个这样的数组,其中一些有超过 4 个元素。
标签: c++ arrays c++11 variadic-templates template-meta-programming