虽然发生了分段错误,但我想访问联合的共享ptr:
struct union_tmp
{
union_tmp()
{}
~union_tmp()
{}
union
{
int a;
std::shared_ptr<std::vector<int>> ptr;
};
};
int main()
{
union_tmp b;
std::shared_ptr<std::vector<int>> tmp(new std::vector<int>);
b.ptr = tmp; //here segmentation fault happens
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误的原因是什么,我该如何避免?
我如何使用std::variant的g++?为什么没有std::variant在std::experimental(尽管std::optional是)?g++我需要什么版本?我不想使用boost,我只想使用标准库.
编辑:似乎只g++ 7支持std::variant.然后我的问题是:什么时候会发布,使用它的实验版本时会遇到什么问题?
我正在echo server使用套接字和系统调用编写自己的程序。我习惯epoll同时与许多不同的客户端一起工作,并且对客户端完成的所有操作都是非阻塞的。当服务器打开并且什么都不做时,它在epoll_wait. 现在我想添加使用信号关闭服务器的可能性。例如,我在 中启动服务器bash terminal,然后按ctrl-c,服务器以某种方式处理SIGINT. 我的计划是使用signalfd. 我使用以下代码创建新的signalfd并将其添加到epoll实例中:
sigset_t mask;
sigemptyset(&mask);
sigaddset(&mask, SIGTERM);
sigaddset(&mask, SIGINT);
signal_fd = signalfd(-1, &mask, 0);
epoll_event event;
event.data.fd = signal_fd;
event.events = EPOLLIN;
epoll_ctl(fd, EPOLL_CTL_ADD, signal_fd, &event);
Run Code Online (Sandbox Code Playgroud)
然后我希望,当我在epoll等待并按下时ctrl-c,事件epoll发生,它唤醒,然后我使用以下代码处理信号:
if (events[i].data.fd == signal_fd)
{
//do something
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
虽然实际上服务器只是停止而不处理信号。我做错了什么,解决我的问题的正确方法是什么?如果我没有正确理解信号,应该使用的地方是什么signalfd?
想象一下我有一个类型:
struct my_type
{
double operator()(int a)
{
return 3.1415;
}
};
Run Code Online (Sandbox Code Playgroud)
然后我想把它包起来std::function.考虑两种不同的方法:
my_type m_t;
std::function<double(int)> f(std::move(m_t));
std::cout << f(4) << std::endl;
Run Code Online (Sandbox Code Playgroud)
如我所料,一切都很好,打印出PI的第一个数字.然后是第二种方法:
std::function<double(int)> ff(my_type());
std::cout << ff(4) << std::endl;
Run Code Online (Sandbox Code Playgroud)
在我看来,这个代码是完全一样的第一个.rvalue作为function包装器的参数传递.但问题是,第二个代码不能编译!我真的不知道为什么会这样.
我想在设置酒吧的特定颜色BarChart的MPAndroidChart.我根据文档做了一切,但颜色没有变化.这是我的代码:
barChart = (BarChart) findViewById(R.id.bar_chart);
List<BarEntry> entries = new ArrayList<BarEntry>();
entries.add(new BarEntry(1.0f, 10.0f)); //tmp values
BarDataSet dataSet = new BarDataSet(entries, "bars");
dataSet.setColor(R.color.red); //color from resourses
BarData barData = new BarData(dataSet);
barChart.setData(barData);
barChart.invalidate();
Run Code Online (Sandbox Code Playgroud)
有趣的是,在我尝试改变条形颜色之前,条形图是蓝色的,在我试图改变它的颜色后,它变成了灰色(无论它必须是什么颜色).我不明白为什么颜色不会改变.我也尝试覆盖类中的getColor方法BarDataSet,但结果是一样的 - 条是灰色的.