BOOST_PP_REPEAT with array
BOOST_PP_REPEAT with array
我有这样的结构:
struct E1
{
typedef boost::tuple<
boost::optional< N::type_A >, // N - namespace
boost::optional< N::type_B >,
...................
boost::optional< N::type_X > //arbitrary number of, maximal is 7
> data_type;
// for access by name
boost::optional<N::type_A> const& type_A() const { return boost::get<0>(data); }
boost::optional<N::type_B> const& type_B() const { return boost::get<1>(data); }
.....................................
boost::optional<N::type_X> const& type_X() const { return boost::get<2>(data); }
data_type data;
};
Q: 如何使用BOOST预处理器创建此结构?对我来说,只知道类型_A,类型_B。。。,type_X类型的名称。
它需要我,因为我必须创建很多这样的结构,只更改类型_a、类型_B。。。类型。
在常见情况下,我可以使用boost预处理器阵列还是集合?
你可以这样做:
#define TYPES (type_A)(type_B)(type_X)
#define GENERATE_TUPLE(maR, maNamespace, maIndex, maType)
BOOST_PP_COMMA_IF(maIndex) boost::optional<maNamespace :: maType>
#define GENERATE_GETTER(maR, maNamespace, maIndex, maType)
boost::optional<maNamespace :: maType> const& maType () const { return boost::get<maIndex>(data); }
struct E1
{
typedef boost::tuple<
BOOST_PP_SEQ_FOR_EACH_I(GENERATE_TUPLE, N, TYPES)
> data_type;
BOOST_PP_SEQ_FOR_EACH_I(GENERATE_GETTER, N, TYPES)
data_type data;
};
N
参数对应于maNamespace
参数。当然,您可以以任何其他方式使用此参数(它只是逐字逐句地传递),例如将N
硬编码到宏中(并在参数中传递一个伪值),或者甚至在其中编码标识符data
,等等。
相关文章:
- Problems with std::cin.fail()
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- C++11 中不同类型的对象的 std::array 的替代方案
- constexpr begin of a std::array
- C++如果必须在编译时确定大小,std::array 有什么意义?
- C++ 错误:"array must be initialized with a brace-enclosed initializer"
- std::array initalization with Visual Studio 2010
- 如何使用 std::swap with array?
- What wrong with `(A.array() == A.array()).matrix()`?
- C++ std::vector to JSON Array with rapidjson
- LLVM IR Array Move with c++ api
- problrm with array in c++
- Cast boost::array<float, 12> for function with argument(const float (&arr)[12])
- 如何使用 std::array 的默认参数? "array must be initialized with a brace-enclosed initializer"
- constexpr with std::array - "Non-type template argument is not a constant expression"
- constexpr std::array with static_assert
- glBufferData with explicit array vs non explicit array
- BOOST_PP_REPEAT with array
- Issue with 2D Array
- 将 int** 转换为"pointer to a two-dimensional array of integers with fixed number of elements per column"