我的工作是用以下方法对常量进行元计算boost::mpl:
使用公式构造给定大小的半幻方:
1 + ((i - j + (n - 1) / 2) mod n) n + ((i + j + (n + 1) / 2) mod n) .
对应数的计算,已知i、j、n,没有问题:
template<int I, int J, int N>
struct MagicNumber
{
public:
static const int value = 1 + ((I - J + (N - 1) / 2) % N) * N + ((I + J +
(N + 1) / 2) % N);
};
现在问题出现了:如何在 的帮助mpl下,对于给定的 n,用这些数字填充二维mpl::vector或类似的结构。我在文档中找到了mpl::push_back和mpl::for_each,但没有关于它们的使用的可理解示例。
对于初学者,最好使用 brigand for c++11 或 boost::hana for c++14,它更容易、更方便并且编译速度更快。
如果你确实需要 boost::mpl,那么你需要做这样的事情:
结果: