c++ - 在带有bool输入的std::function中使用boost变量

标签 c++ function pointers boost variant

请参见以下代码:

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);

关于c++ - 在带有bool输入的std::function中使用boost变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61551687/

相关文章:

c++ - QT从主窗口更新工作线程的变量

c++ - 计算数组中的空值

python - 如何保存 "for"循环中的值? python 3

c++ - 在 C++ 中连接 char[] 和 uint32_t

c++ - 如何获取 map 值的引用?

c - 访问结构体成员时出现段错误

C++ - 带有结构指针的字符串输入?

C++修改对象指针指向但不保留值

c++ - 如何获取打开的 MDI child 的数量(计数)

c++ - 调用函数是否被视为上下文切换?