boost-preprocessor – Boost-pp:如何确定宏参数是否为元组
发布时间:2020-12-16 07:08:57 所属栏目:百科 来源:网络整理
导读:元组是由逗号括起来的逗号分隔列表,例如 ()(,)(thing,)(2,3) 如果我有 #define ISTUPLE(x) ... 我喜欢ISTUPLE(nope)解析为0和ISTUPLE((是))以解析为1. [FWIW,我有足够的_RTFM_’d.] 解决方法 它可能在预处理库中完成,只需要做一些工作,但Variadic宏数据库(
元组是由逗号括起来的逗号分隔列表,例如
() (,) (thing,) (2,3) 如果我有 #define ISTUPLE(x) ... 我喜欢ISTUPLE(nope)解析为0和ISTUPLE((是))以解析为1. [FWIW,我有足够的_RTFM_’d.] 解决方法
它可能在预处理库中完成,只需要做一些工作,但Variadic宏数据库(自发布此问题后添加到Boost)有一个现成的解决方案.在boost / vmd / is_tuple.hpp中定义的
BOOST_VMD_IS_TUPLE 应该可以满足您的需求:
#include <iostream> #include <boost/vmd/is_tuple.hpp> #if BOOST_VMD_IS_TUPLE() != 0 #error BOOST_VMD_IS_TUPLE() != 0 #endif #if BOOST_VMD_IS_TUPLE(nope) != 0 #error BOOST_VMD_IS_TUPLE(nope) != 0 #endif #if BOOST_VMD_IS_TUPLE((yep)) != 1 #error BOOST_VMD_IS_TUPLE((yep)) != 1 #endif #if BOOST_VMD_IS_TUPLE(()) != 1 #error BOOST_VMD_IS_TUPLE(()) != 1 #endif #if BOOST_VMD_IS_TUPLE((,)) != 1 #error BOOST_VMD_IS_TUPLE((,)) != 1 #endif #if BOOST_VMD_IS_TUPLE((thing,)) != 1 #error BOOST_VMD_IS_TUPLE((thing,)) != 1 #endif #if BOOST_VMD_IS_TUPLE((2,3)) != 1 #error BOOST_VMD_IS_TUPLE((2,3)) != 1 #endif static_assert(BOOST_VMD_IS_TUPLE() == 0,"BOOST_VMD_IS_TUPLE() != 0"); static_assert(BOOST_VMD_IS_TUPLE(nope) == 0,"BOOST_VMD_IS_TUPLE(nope) != 0"); static_assert(BOOST_VMD_IS_TUPLE((yep)) == 1,"BOOST_VMD_IS_TUPLE((yep)) != 1"); static_assert(BOOST_VMD_IS_TUPLE(()) == 1,"BOOST_VMD_IS_TUPLE(()) != 1"); static_assert(BOOST_VMD_IS_TUPLE((,)) == 1,"BOOST_VMD_IS_TUPLE((,)) != 1"); static_assert(BOOST_VMD_IS_TUPLE((thing,"BOOST_VMD_IS_TUPLE((thing,)) != 1"); static_assert(BOOST_VMD_IS_TUPLE((2,3)) == 1,"BOOST_VMD_IS_TUPLE((2,3)) != 1"); int main(void) { using std::cout; using std::endl; cout << "BOOST_VMD_IS_TUPLE() == " << BOOST_VMD_IS_TUPLE() << endl; cout << "BOOST_VMD_IS_TUPLE(nope) == " << BOOST_VMD_IS_TUPLE(nope) << endl; cout << "BOOST_VMD_IS_TUPLE((yep)) == " << BOOST_VMD_IS_TUPLE((yep)) << endl; cout << "BOOST_VMD_IS_TUPLE(()) == " << BOOST_VMD_IS_TUPLE(()) << endl; cout << "BOOST_VMD_IS_TUPLE((,)) == " << BOOST_VMD_IS_TUPLE((,)) << endl; cout << "BOOST_VMD_IS_TUPLE((thing,)) == " << BOOST_VMD_IS_TUPLE((thing,)) << endl; cout << "BOOST_VMD_IS_TUPLE((2,3)) == " << BOOST_VMD_IS_TUPLE((2,3)) << endl; return 0; } 输出: BOOST_VMD_IS_TUPLE() == 0 BOOST_VMD_IS_TUPLE(nope) == 0 BOOST_VMD_IS_TUPLE((yep)) == 1 BOOST_VMD_IS_TUPLE(()) == 1 BOOST_VMD_IS_TUPLE((,)) == 1 BOOST_VMD_IS_TUPLE((thing,)) == 1 BOOST_VMD_IS_TUPLE((2,3)) == 1 (http://coliru.stacked-crooked.com/a/6e41eaf17437c5d5) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读