使用c ++模板的2s电源阵列

我们可以在编译时使用c ++中的模板创建下面的数组或类似的东西。

int powerOf2 [] = {1,2,4,8,16,32,64,128,256}

这是我得到的最接近的。

template <int Y> struct PowerArray{enum { value=2* PowerArray<Y-1>::value };};

但随后使用我需要像PowerArray <i>这样的编译器给出的错误,因为我是动态变量。


你可以使用BOOST_PP_ENUM来达到这个目的:

#include <iostream>
#include <cmath>
#include <boost/preprocessor/repetition/enum.hpp>

#define ORDER(z, n, text) std::pow(z,n)

int main() {
  int const a[] = { BOOST_PP_ENUM(10, ORDER, ~) };
  std::size_t const n = sizeof(a)/sizeof(int);
  for(std::size_t i = 0 ; i != n ; ++i ) 
    std::cout << a[i] << "n";
  return 0;
}

输出识别器:

1
2
4
8
16
32
64
128
256
512

这个例子是一个修改后的版本(以满足您的需要):

  • 技巧:使用宏填充数组值(代码生成)

  • 没有什么反对使用BOOST_PP_ENUM,但我认为你需要更多的代码,我会告诉你。

    我会做什么,我会做一个你的类型类的构造函数,它只是将数组设置为你需要的东西。 这样一来,只要程序建立并且它保持良好和整洁,它就可以完成。 也是正确的方法。

         class Power
        {
        public:
             Power();
             void Output();
             // Insert other functions here
        private:
             int powArray[10];
        };
    

    然后实现将使用一个基本的“for循环”将它们加载到刚刚创建的数组中。

    Power::Power()
    {
        for(int i=0;i<10;i++){
             powArray[i] = pow(2,i);
        }
    }
    void Power::Output()
    {
         for(int i=0;i<10;i++){
              cout<<powArray[i]<<endl;
         }
    }
    

    希望这有助于...

    链接地址: http://www.djcxy.com/p/62691.html

    上一篇: array of 2s power using template in c++

    下一篇: Programmatically create static arrays at compile time in C++