有没有办法在编译时定义constexpr值的值?

时间:2016-10-07 10:47:18

标签: c++ c++14 constexpr compile-time compile-time-constant

使用宏时,可以在使用-D <name>=<value>进行编译时定义值。

可以使用constexpr值进行类似的操作吗?

要激发问题,请考虑以下code,它在编译时生成12x12乘法表并在运行时打印它:

#include <iostream>
#include <algorithm>
#include <ostream>
#include <array>
#include <iomanip>

template <size_t...N>
constexpr auto make_compile_time_sequence(size_t const row, std::index_sequence<N...>) {
  return std::array<size_t,sizeof...(N)> {
    {
      row*(N+1)...
    }
  };
}

template <size_t...N>
constexpr auto make_compile_time_square(std::index_sequence<N...> ){
  return std::array<std::array<size_t, sizeof...(N)>,sizeof...(N)> {
    {
      make_compile_time_sequence(N+1, std::make_index_sequence<sizeof...(N)>{})...
    }
  };
}

constexpr std::size_t N = 12;
constexpr auto multab_N = make_compile_time_square(std::make_index_sequence<N>{});

void testCompileTimeArray(std::ostream &out){
  std::for_each(std::begin(multab_N), std::end(multab_N),
    [&out](auto row) {
      out << '\n';
      std::for_each(std::begin(row), std::end(row), [&out](auto elt) {
        out << std::setw(4) << elt;
      });
    });
    out << '\n';
}

int main() {
    testCompileTimeArray(std::cout);
}

目前N是硬编码的,必须手动更改才能打印MxM乘法表(其中M!= 12)。

是否可以使用-D N=<value>constexpr做类似的事情?

0 个答案:

没有答案