【发布时间】:2016-01-27 08:05:14
【问题描述】:
假设我有一个可变参数模板:
template<typename... Args>
class Foo;
这个可变参数模板递归地生成另一个模板,直到它到达最后一级的一个参数Foo。现在我想要一个宏,例如Bar(...),当我调用它时,我会得到这样的结果:
Bar(float, int, string, vector<int>)
// expands to
Macro(Foo<float, int, string, vector<int>>)
Macro(Foo<int, string, vector<int>>)
Macro(Foo<string, vector<int>>)
Macro(Foo<vector<int>>)
Macro(...) 是另一个在这个类上做某事的宏。我希望能够使用 Boost Preprocessor 来减少我必须编写的代码。
请给我一些建议,帮助我编写这样的宏。
【问题讨论】:
-
这是可能的,但这听起来很像XY Problem。
-
Bar和Macro是不同的宏吗?您是否希望为可变参数模板的每个调用扩展调用Macro宏? -
感谢您的建议。虽然我不完全同意你的观点,但我改变了问题以避免看起来像一个 XY 问题。
-
@nabla 您的两个问题的答案都是肯定的。它们是不同的,
Macro必须为每个版本调用。 -
@MohsenTamiz 我认为this slight variation 更有意义。
标签: c++ boost macros boost-preprocessor