【发布时间】:2018-06-30 17:39:36
【问题描述】:
所以我有几个函数,我得到一个神奇的函数对象,它提供重载解决:
void foo1();
void foo2(int);
auto foo_ptr = boost::hana::overload(foo1,foo2);
//Later
foo_ptr(12); //Both Valid (Yeah!)
foo_ptr();
但是当我这样做时,问题就出现了:
using ptr_t = decltype(foo_ptr);
struct mine
{
ptr_t ptr;
mine(ptr_t ptr) : ptr(ptr){}
};
mine m(foo_ptr);
当我尝试编译这段代码时,我得到error: no matching function for call to 'boost::hana::overload_t<void (*)(int)>::overload_t()'。
在godbolt...上亲自查看。
现在我的问题是:
我是否允许复制这些重载对象(hana 的文档没有说明任何一种方式),如果可以,为什么当我将它作为成员放入类时它会失败?
【问题讨论】:
-
从错误中,它正在尝试调用默认构造函数。如果您通过引用将
ptr传递给mine会发生什么? -
@1201ProgramAlarm 如果我通过 const 引用将 ptr 传递给我的,它出于某种原因可以工作......
标签: c++ c++14 overloading boost-hana