使用boost :: mpl,我可以创建一个三元素向量的typedef,如下所示:
typedef boost::mpl::vector_c<int,1,2,3> height_t;
我可以使用以下snippit从这个typedef中提取值:
std::vector<int> height;
boost::mpl::for_each<height_t>(boost::bind(&std::vector<int>::push_back, &height, _1));
assert(height[0] == 1);
assert(height[1] == 2);
assert(height[2] == 3);
我想知道是否有办法做同样的事情,但使用普通的'C'数组而不是std::vector
。不幸的是,我不能在这个项目中使用STL容器。
uint32_t height[3];
boost::mpl::for_each<height_t>(????, &height, _1));
我怀疑我需要更换????与另一个绑定子句。有什么想法吗?
答案 0 :(得分:2)
尝试类似
的内容 struct foo {
int c;
int* arr;
template<class U>
void operator(U& u) { arr[c++] = u; }
foo(int a*) : c(0), arr(a) {}
};
for_each<height_t>(foo(height));
答案 1 :(得分:0)
是的,你的想法会奏效。我轻描淡写地重写了一遍。但是,我想知道的是,如果有一种方法可以使用bind和lambda对inplace functor做同样的事情。与此同时,我会用你的想法。
template <typename type_t> struct static_assign { type_t* a; static_assign(type_t* a) : a(a) {} template<typename T> void operator()(T t) { *a++ = t; } }; uint32_t color[MAX_COLORS]; uint32_t* pcolor = (uint32_t*)&color; boost::mpl::for_each<typename static_color<scheme_t>::type>(static_assign<uint32_t>(pcolor)); pcolor += indicator;