我有课
struct testdb1 {
typedef tuple<int, double> value_type;
static const value_type data[];
};
const testdb1::value_type testdb1::data[] = {
make_tuple(1, 1.1),
make_tuple(2, 2.2),
make_tuple(3, 3.3),
make_tuple(3, 3.3)
};
现在,我希望能够以更紧凑的方式定义它,我会想象这样的事情:
STATIC_DB(
testdb1,
make_tuple(1, 1.1),
make_tuple(2, 2.2),
make_tuple(3, 3.3),
make_tuple(3, 3.3)
)
我猜宏是可行的方法,但我不知道如何编写(如果可能的话)这样的东西。如果这可以用模板做,那会更好,但我不知道如何。
提前感谢您的帮助
答案 0 :(得分:1)
可能有更好的方法可以做到这一点,但你可以像这样使用
#define TUPLE(first,second) make_tuple(first,second),
#define TUPLE_LAST(first,second) make_tuple(first,second)
#define STATIC_DB(type,tuples) \
struct type{\
typedef tuple<int,double> value_type;\
static const value_type data[];\
};\
const type::value_type type::data[]=\
tuples;
STATIC_DB(
testdb1,
{
TUPLE(1, 1.1)
TUPLE(2, 2.2)
TUPLE(3, 3.3)
TUPLE_LAST(3, 3.3)
}
)
格式化输出:
struct testdb1{
typedef tuple<int,double> value_type;
static const value_type data[];
};
const testdb1::value_type testdb1::data[]= {
make_tuple(1,1.1),
make_tuple(2,2.2),
make_tuple(3,3.3),
make_tuple(3,3.3)
};
答案 1 :(得分:1)
使用constexpr
,您可以执行以下操作(紧凑且清晰):
struct testdb1 {
static constexpr tuple<int, double> data[] =
{
make_tuple(1, 1.1),
make_tuple(2, 2.2),
make_tuple(3, 3.3),
make_tuple(3, 3.3)
};
};
答案 2 :(得分:0)
你可以试试这个:
#define STATIC_DB(t1_, t2_, T_, ...) \
struct T_ { \
typedef tuple<t1_, t2_> value_type; \
static const value_type data[]; \
}; \
const T_::value_type T_::data[] = { \
__VA_ARGS__ \
};
STATIC_DB(int, double, testDB, make_tuple(1, 1.1), make_tuple(2, 2.2) );