使用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++