【发布时间】:2021-03-08 00:13:29
【问题描述】:
我正在尝试以下定义:
std::pair<std::int16_t, std::function<bool()>> urlvaliditypair = std::make_pair(enumIter, &CheckSequence::checkURLValidity);
另一个相关的定义尝试:
std::map<std::int16_t, std::function<bool()>> urlvalidityfunc = new std::map<std::int16_t, std::function<bool()>>(enumIter, &CheckSequence::checkURLValidity);
其中,函数checkURLValidity定义为:
bool CheckSequence::checkURLValidity() { return true; }
请指出以下编译错误可能是什么问题:
error: no viable conversion from 'pair<typename __make_pair_return<short &>::type, typename __make_pair_return<bool (CheckSequence::*)()>::type>' (aka 'pair<short, bool (conformance::download::CheckSequence::*)()>') to 'std::pair<std::int16_t, std::function<bool ()> > *' (aka 'pair<short, function<bool ()> > *')
std::pair<std::int16_t, std::function<bool()>> *urlvalidityfunc = std::make_pair(enumIter, &CheckSequence::checkURLValidity);
我尝试了许多变体,但这个错误试图传达什么? std::pair 和 std::map 定义都有一个不匹配的构造函数错误。我也试过 std::mem_fn。
目标是用迭代器和相应的方法构建一个表/映射。请指教。
【问题讨论】:
-
如果
CheckSequence::checkURLValidity()不是static成员函数,那么如果没有CheckSequence的实例,这就是不够的可调用对象。此外,我不确定从成员函数到std::function的隐式转换是否仍然适用于std::make_pair()中的类型推导。您是否尝试过在您的众多变体 中显式构造std::function实例?顺便提一句。 minimal reproducible example 不会受伤。 -
两种有效的变体(即使在
std::make_pair()中进行类型推断):Live Demo on coliru -
@Scheff,感谢您提供演示代码。使用您的建议。但是,相关调用仍然显示错误。虽然 insert 调用适用于地图,但 insert_or_assign 调用为什么会抱怨?不过,感谢您提供有关工作构造的指标。问候
-
虽然 insert 调用适用于地图,但 insert_or_assign 调用为什么会抱怨? 不知道。它不在我身边:Life Demo on coliru
标签: c++ exception definition