无法从大括号初始值设定项列表转换为向量

Could not convert from brace initializer list to vector

本文关键字:列表 转换 向量      更新时间:2023-10-16

我观察到下面代码中的编译错误"error:无法将'{{&Foo::print_add}, {&X::print}} '从"转换为'std::vector'"。

我做向量插入错误吗?顺便说一句,我不想使用push_back方法。是否可以使用'='插入。我有一种感觉,这是一个语法错误,但无法找到它。

当我用谷歌搜索时,我发现在早期版本的gcc中有一个bug。我使用的是4.8.1,所以我假设我使用的库应该包含修复。

#include <functional>
#include <iostream>
#include <vector>
struct Foo {
  Foo(int num) : num_(num) {}
  void print_add(int i) const { std::cout << num_+i << 'n'; }
  int num_;
};
struct X {
  void print() {
    std::cout << "I'm in X "<<std::endl;
  }
};
struct XXX {
  std::function<void(const Foo&,int)> a;
  std::function<void(const X&)> b;
};
int main()
{
  std::vector<XXX> vec = 
  {  
     { 
        {&Foo::print_add},
        {&X::print}
    }
 };
}

X::print是一个非const成员函数,因此指向它的指针不能用来初始化std::function<void(const X&)>