使用 c11 _Generic
有没有办法将多个类型映射到一个值?
例如:
_Generic(e, \
A *: foo_expression, \
B **: foo_expression, \
C: foo_expression, \
enum D: bar_expression, \
void *: bar_expression)
有没有办法对类型进行分组? (这不是仅用于表达意图的有效语法)
_Generic(e, \
A *: B **: C: foo_expression, \
enum D: void *: bar_expression)
我问的原因是 args foo
和 baz
最终可能成为大型表达式(不一定能重构为函数) , 因此最好有一种避免大量重复的方法。
注意:
如果不支持使用 _Generic
的方法,我_可以_制作一个可变参数宏来将多个参数粘合到一个值...
#define GENERIC_TYPE_GLUE3(answer, arg0, arg1) \
arg0: answer, arg1: answer
#define GENERIC_TYPE_GLUE4(answer, arg0, arg1, arg2) \
arg0: answer, arg1: answer, arg2: answer
....
... 有许多这样的宏,然后使用可变参数包装器自动使用正确的宏,请参阅:https://stackoverflow.com/a/24837037/432509
_Generic(e, \
GENERIC_TYPE_GLUE(foo_expression, short int, long),
GENERIC_TYPE_GLUE(bar_expression, float, double))
(参见工作示例:https://gist.github.com/ideasman42/4426f255880ff6a53080)
最佳答案
不,与 switch
类似,没有预见到可以为 _Generic
重新组合多个案例的语法。那么,您的重组宏方法可能是适合您目的的正确方法。您可以查看由 boost 或我的包 P99 完成的宏元编程。这允许您只有一个这样的宏,它还可以计算案例的数量。
关于c - _通用 : multiple types to a single value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29874040/