Ste*_*phQ 6 c++ templates metaprogramming
我正在尝试阅读boost标头,以弄清楚他们是如何设法实现的
or_<...>
Run Code Online (Sandbox Code Playgroud)
和
and_<...>
Run Code Online (Sandbox Code Playgroud)
元功能使:
1)他们可以有任意数量的参数(好吧,说多达5个参数)
2)它们具有短路行为,例如:
or_<false_,true_,...>
Run Code Online (Sandbox Code Playgroud)
不会实例化true_之后的任何内容(因此它也可以声明但未定义)
不幸的是,预处理器元编程让我无法完成任务:P
提前感谢您的任何帮助/建议.
以下是短路对于三参数版本的工作原理
template<typename T1, typename T2, typename T2>
struct or_ : conditional<T1::value, true_, or<T2, T3>>::type
{ };
Run Code Online (Sandbox Code Playgroud)
也就是说,如果T1::value为true,则继承true_,否则继承or<T2, T3>。您需要一个停止条件,其工作方式类似于@begemoth所示:专门or_针对第一种类型being none_t,它将定义它是::valueto false。