首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理boost变量和boost函数

处理boost变量和boost函数
EN

Stack Overflow用户
提问于 2015-04-13 14:13:42
回答 1查看 669关注 0票数 0

我想要一个向量来保持不同类型的boost::function,所以,我尝试了一个变体:

代码语言:javascript
复制
#include <boost/variant.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>

#include <vector>

void a(int, int)
{}


void b()
{}


int main(int argc, char **argv)
{
    typedef boost::variant<boost::function0<void>, boost::function2<void, int, int>> v;

    std::vector<v> c;

    c.push_back(boost::bind(&a, _1, _2));
    c.push_back(boost::bind(&b));

    auto& function = boost::get<boost::function2<void, int, int>>(c[0]);

    function(4, 5);
}

但我有个错误:

代码语言:javascript
复制
   /usr/local/include/boost/variant/variant.hpp:1515:28: error: call to member function 'initialize' is ambiguous
              initializer::initialize(
              ~~~~~~~~~~~~~^~~~~~~~~~
/usr/local/include/boost/variant/variant.hpp:1692:9: note: in instantiation of function template specialization 'boost::variant<boost::function0<void>, boost::function2<void, int, int>, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>::convert_construct<boost::_bi::bind_t<void, void (*)(int, int), boost::_bi::list2<boost::arg<1>, boost::arg<2> > > >' requested here
        convert_construct( detail::variant::move(operand), 1L);
        ^

我没有找到任何帮助来处理这些错误

(和其他编译器输出) https://ideone.com/QEdlyF

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-13 14:26:45

Boost函数的构造函数在它可以接受的内容上是相当自由的。这导致在变体的元素类型中没有“最佳”构造函数。

你必须显式地投出。

再说一遍,将有关类型的知识全部隐藏起来(因为有用的部分无论如何都是模棱两可的)并使用Boost Any可能会更容易。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29607529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档