c++ - 将 boost 变体与包含 bool 输入的 std::functions 一起使用
问题描述
请参阅以下代码:
void stringPtrFunc(const std::string *s) {}
void boolFunc(const bool b) {}
int main() {
boost::variant<std::function<void(const std::string *)>, std::function<void(const bool)>> myVariant;
myVariant = &stringPtrFunc; // Compiles fine
myVariant = &boolFunc; // Error
}
我收到关于模棱两可的过载的错误。似乎 stringPtrFunc 可以转换为 boolFunc,但反之亦然。为什么没有发生完全匹配?我可以强制比赛吗?
谢谢,
瑞安
解决方案
问题是它&boolFunc
不是std::function
(任何类型的),它是一个函数指针。因此,它可以转换为std::function
与之兼容的任何内容,但没有一个比其他任何一个更好。特别是,由于任何指针类型都可以隐式转换为 bool,因此对于任何指针类型&boolFunc
都可以转换std::function<void(T *)>
为。
因此,它与任何一种变体类型都同样匹配。
为避免这种情况,您需要明确说明std::function
您想要哪个:
myVariant = std::function<void(const bool)>(&boolFunc);
推荐阅读
- python - 在 Python 中使用 redis 实现推/拉(或队列)
- r - 如何将数据框中的一行复制到另一个df并一次将其转换为一列?
- nginx - Http 响应 401 访问 nginx 反向代理后面的服务
- arm - armclang/armcc 是否提供复制省略选项?
- php - php多数组编辑
- windows - Kafka Brokers - Windows 中的日志保留问题 - 是否有任何临时解决方法?
- google-apps-script - 自动更改一个 Google 电子表格的多个选项卡中的列格式
- r - 使用 sparklyr 在 Databricks 中读取 Parquet 文件
- rangeslider - 可以让这个 CodePen 在本地运行
- python - 多层次层次结构中的python json config变量键替换