问题标签 [boost-mpl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ - 将类型映射到枚举
是否可以进行编译时Type -> Enum Series
映射?
用一个例子来说明:
比方说,我有一些Type
枚举值:
现在我以某种方式声明以下内容:“让我们Enum1
与Enum4
类型关联Type
(还不知道如何实现)。
现在我希望能够检查以下内容(最好在编译时使用 mpl 来完成):
如果某些任意类型和枚举实际上正在相互映射:
所以结果如下:
如果有人知道实现这一点的好方法,请帮助我。也许使用的东西boost::mpl
,我不确定。
谢谢。
c++ - 是否可以在运行时迭代 mpl::vector 而不实例化向量中的类型?
通常,我会boost::mpl::for_each<>()
用来遍历 a boost::mpl::vector
,但这需要一个仿函数,其模板函数声明如下:
template<typename T> void operator()(T&){T::staticCall();}
我的问题是我不希望对象 T 被for_each<>
. 我根本不需要 T 参数operator()
。有没有办法做到这一点,或者替代方法for_each<>
不会将 T 类型的对象传递给模板函数?
理想情况下,我希望 operator() 定义如下所示:
template<typename T> void operator()(){T::staticCall();}
当然,我不希望 T 在调用之前被实例化。也欢迎任何其他提示/建议。
c++ - 连接 boost::mpl::string
如何连接 boost::mpl::string?以下代码产生错误:
完整来源:http: //liveworkspace.org/code/31902a4b1b0831d054119bc0b8923cb6 错误:
在 source.cpp:3:0 包含的文件中:string.hpp:在 'boost::mpl::push_back_impl< boost::mpl::string_tag 的实例化中
::apply, boost::mpl::string<24930> >': boost/mpl/push_back.hpp:32:1:
实例化自'boost::mpl::push_back< boost::mpl::string<>, boost::mpl::string<24930> ' boost/mpl/aux_/has_type.hpp:20:1:
实例化自 'const bool boost::mpl::aux::has_type< boost::mpl::push_back, boost ::mpl::string<24930>, mpl_::bool_ ::value' boost/mpl/aux_/has_type.hpp:20:1:
从 'boost::mpl::aux::has_type< boost::mpl::push_back, boost::mpl::string<24930> >, mpl_::bool_ ' boost/mpl/aux_/preprocessed/gcc/quote 实例化.hpp:56:5: 从 'boost::mpl::quote2< boost::mpl::push_back ::apply, boost::mpl::string<24930> >' boost/mpl/aux_/preprocessed/gcc 实例化/apply_wrap.hpp:49:1: 实例化自 'boost::mpl::apply_wrap2< boost::mpl::quote2, boost::mpl::string<>, boost::mpl::string<24930> ' boost /mpl/aux_/preprocessed/gcc/bind.hpp:207:21: 实例化自 'boost::mpl::bind2< boost::mpl::quote2, mpl_::arg<1>, mpl_::arg<2 > ::apply, boost::mpl::string<24930> >' boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp:49:1:从 'boost::mpl::apply_wrap2< boost::mpl::protect< boost::mpl::bind2, mpl_::arg<1>, mpl_::arg<2> >, 0 实例化, boost::mpl::string<>, boost::mpl::string<24930> ' boost/mpl/aux_/preprocessed/gcc/apply.hpp:73:1: 从 'boost::mpl::apply2< 实例化boost::mpl::push_back, mpl_::arg<2> >, boost::mpl::string<>, boost::mpl::string<24930> ' boost/mpl/aux_/preprocessed/gcc/fold_impl. hpp:87:85: 从 'boost::mpl::aux::fold_impl< 3, boost::mpl::v_iter< boost::mpl::vector, boost::mpl::string<25444>, boost ::mpl::string<25958>>, 0l, boost::mpl::v_iter< boost::mpl::vector, boost::mpl::string<25444>, boost::mpl::string<25958>, 3l, boost::mpl::string<>, boost::mpl::push_back, mpl_::arg<2> > 'boost/mpl/ fold.hpp:39:18: 从 'boost::mpl::fold< boost::mpl::vector, boost::mpl::string<25444>, boost::mpl::string<25958> > 实例化, boost::mpl::string<>, boost::mpl::push_back, mpl_::arg<2> > ' source.cpp:18:2: 从这里实例化 string.hpp:207:53: error: 'value ' 不是 'boost::mpl::string<24930>' 的成员 在来自 boost/mpl/back_inserter.hpp:18:0、来自 boost/mpl/aux_/inserter_algorithm.hpp:18、来自 boost/ 的文件中mpl/copy.hpp:20, from string.hpp:26, from source.cpp:3: boost/mpl/push_back.hpp: 在 'boost::mpl::push_back< boost::mpl::push_back, boost::mpl::string<24930> >, boost::mpl::string<25444> ': boost/mpl/aux_/has_type.hpp:20:1 :
从 'const bool boost::mpl::aux::has_type< boost::mpl::push_back< boost::mpl::push_back, boost::mpl::string<24930> >, boost::mpl:: 实例化string<25444> , mpl_::bool_ ::value' boost/mpl/aux_/has_type.hpp:20:1:
实例化自 'boost::mpl::aux::has_type< boost::mpl::push_back< boost ::mpl::push_back, boost::mpl::string<24930> >, boost::mpl::string<25444>, mpl_::bool_ ' boost/mpl/aux_/preprocessed/gcc/quote.hpp:56 :5: 从 'boost::mpl::quote2< boost::mpl::push_back 实例化
c++ - 在 STL 容器中存储属性?
假设我有一个名为 generic_pair 的类,其形式为:
现在,问题是我希望能够将一堆这些 generic_pairs 存储在 STL 容器中,但容器中的所有 <K, V> 并非都是相同的类型。例如,一些元素可能是 < int, int > 而其他元素可能是 < int , string > 等等。问题是我们怎样才能做到这一点?
我的第一个想法是使用“标签”来创建封装类型的层次结构,并使用泛型类型声明容器,但实际元素具有继承类型。例如,
我敢打赌有更好,更正确的方法来做到这一点?任何想法,方向表示赞赏。如果您在 MPL 或其他地方看到过类似的实现或相关工具/技术,那也很有帮助。(我试图避免宏)
c++ - 将 boost::mpl::list 应用于类型的模板参数
我有一个需要 boost::variant 的类,其中包含指向各种类型的共享指针,如下所示:
该类目前需要以下形式的模板参数才能编译:
如何使用 mpl 列表以便我可以为用户提供以下更简单的定义,然后在我的类实现中将其转换为上面的示例格式?
c++ - 有没有办法将 lambda 的签名推断为 mpl 序列?
有没有办法将 c++0x lambda 的签名、结果和参数类型推断为 Boost.MPL 序列,例如boost::mpl::vector
?例如,对于 lambda
我想得到一个boost::mpl::vector<void,float,int>
.
c++ - 使用 boost::mpl 的类型列表的排列
我正在尝试创建一个包含给定类型列表排列的列表。
当我使用指定的列表而不是通过从实际输入中删除来生成新列表时,下面的代码似乎可以正常工作,尽管没有预期的结果。下面的 permutation_helper 和 broken_helper 之间的差异证明了这一点。
有谁知道为什么mpl::remove
在这种情况下似乎没有按预期运行?
我使用断言来确定函数返回的内容,typelist 不是预期的结果。这是断言为 broken_helper 返回的消息:
使用 permutation_helper 的输出是一个实际列表:
boost - 用于可变参数模板向量的 mpl 样式 copy_if 元函数
我有一个可以与常规 boost mpl 配合使用的元程序。它看起来更像以下内容。
我正在尝试使用可变参数模板向量 (mpl::vector) 对其进行编译。为此,我正在使用此处找到的可变参数模板向量的实现:https ://svn.boost.org/svn/boost/sandbox/variadic_templates
尽管有一些测试,但我在 repo 中找不到可用的 copy_if、remove_if 和 count_if 实现。那些元程序在那里,我只是找不到它们?或者,您能否帮我实现其中一个,以便它也支持 mpl 占位符。提前感谢您的帮助。
c++ - 我需要 exp() 函数的 boost::mpl 实现
有人知道我在哪里可以找到它吗?否则我只好自己写了。
谢谢。
c++ - Boost::MPL 的实际使用示例?
您能否分享Boost::MPL使用的任何真实示例(除了 lambdas),只是为了让我更好地了解它的用途和实际使用领域?MPL 文档教程有一个维度分析示例,但可能因为它是一个如此学术的示例,它并没有让我对 Boost::MPL 以及何时可以有效使用它的感觉。