作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在编译时迭代结构并写入输出迭代次数。只是提一下 - 在实际情况下,我会在数据中传递更多参数。
#include <iostream>
#include <string>
#include <vector>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/size.hpp>
#include <boost/preprocessor/repetition/repeat.hpp>
struct MyStruct
{
int x;
int y;
};
BOOST_FUSION_ADAPT_STRUCT(
MyStruct,
(int, x)
(int, y)
)
#define PRINT(unused, number, data) \
std::cout << number << std::endl;
int main()
{
MyStruct s;
std::cout << boost::fusion::size(s) << std::endl;
//line below works - it iterate and write output
BOOST_PP_REPEAT(2, PRINT, "here I will pass my data")
//this won't compile
//BOOST_PP_REPEAT(boost::fusion::size(s), PRINT, "here i will pass my data")
}
如何修复有问题的行,以便在我向结构中添加更多成员时它能正常工作?我需要 C++03 的解决方案:(
最佳答案
您可以使用遍历每个元素的 boost::fusion::for_each
而不是使用 BOOST_PP_REPEAT
。示例:
#include <iostream>
#include <string>
#include <vector>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/size.hpp>
#include <boost/preprocessor/repetition/repeat.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
struct MyStruct {
int x;
int y;
};
BOOST_FUSION_ADAPT_STRUCT(
MyStruct,
(int, x)
(int, y)
)
template<typename Data>
struct PrintWithData {
PrintWithData(Data data) : data(data) {}
template<typename T>
operator()(const T& thingToBePrinted)
{
std::cout << thingToBePrinted << std::endl;
}
Data data;
};
int main()
{
MyStruct s;
//this will compile
boost::fusion::for_each(s, PrintWithData<std::string>("here I will pass my data"));
}
关于c++ - BOOST_PP_REPEAT 与 boost::fusion::size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31708960/
我想使用 BOOST_PP_REPEAT(count, macro, data) 并且我的宏看起来像 `模板(z, n, x, y) BOOST_PP_REPEAT (5, TEMPLATE, 4,
我有这样的结构: struct E1 { typedef boost::tuple, // N - namespace boost::optional, .........
我想在编译时迭代结构并写入输出迭代次数。只是提一下 - 在实际情况下,我会在数据中传递更多参数。 #include #include #include #include #include #
我是一名优秀的程序员,十分优秀!