如何编写将被扩展以使用模板参数定义对象的宏

问题描述 投票:0回答:1

是否可以编写一个宏,从而从中创建一个对象定义,例如:

DEFINE_OBJECT_INVALID_VALUES(ObjectType, double, int, 1.0, 1) 

应成为:

ObjectType a<double, int>(1.0, 1);

DEFINE_OBJECT_INVALID_VALUES(ObjectType, double, int, bool, 1.0, 1, false) 

应成为:

ObjectType a<double, int, bool>(1.0, 1, false);
c++ variadic-macros
1个回答
1
投票
#define DEFINE_OBJECT_INVALID_VALUES_2(T1, V1) \ a<T1>(V1) #define DEFINE_OBJECT_INVALID_VALUES_4(T1, T2, V1, V2) \ a<T1, T2>(V1, V2) #define DEFINE_OBJECT_INVALID_VALUES_6(T1, T2, T3, V1, V2, V3) \ a<T1, T2, T3>(V1, V2, V3) #define DEFINE_OBJECT_INVALID_VALUES_N(_1,_2,_3,_4,_5,_6,_7,_8,_9,N,...) \ DEFINE_OBJECT_INVALID_VALUES_##N #define DEFINE_OBJECT_INVALID_VALUES(objecttype, ...) \ objecttype DEFINE_OBJECT_INVALID_VALUES_N(__VA_ARGS__,9,8,7,6,5,4,3,2,1)(__VA_ARGS__) // will expand to: // ObjectType a<double, int>(1.0, 1) DEFINE_OBJECT_INVALID_VALUES(ObjectType, double, int, 1.0, 1) // will expand to: // ObjectType a<double, int, bool>(1.0, 1, false) DEFINE_OBJECT_INVALID_VALUES(ObjectType, double, int, bool, 1.0, 1, false)
© www.soinside.com 2019 - 2024. All rights reserved.