小编Hea*_*eek的帖子

范围解析运算符枚举编译器特定的扩展?

这个问题上,有一个答案表明:

您可以使用typedef使Color枚举类型可访问,而不指定它的"全名".

typedef Sample::Colour Colour;
Colour c = Colour::BLUE;
Run Code Online (Sandbox Code Playgroud)

这听起来对我来说是正确的,但有人对它进行了投票并留下了这个评论:

在枚举上使用范围解析运算符::(在"Color :: BLUE"中)是特定于编译器的扩展,而不是标准C++

真的吗?我相信我已经在MSVC和GCC上都使用了它,尽管我不确定.

c++ standards

7
推荐指数
3
解决办法
4824
查看次数

任何元编程方式为不同数量的模板参数生成重载?

我正在尝试创建一组函数模板,可以使用不同类型和数量的参数,如下所示:

template <T0>
void call(T0 arg0);

template <T0, T1>
void call(T0 arg0, T1 arg1);

template <T0, T1, T2>
void call(T0 arg0, T1 arg1, T2 arg2);

template <T0, T1, T2, T3>
void call(T0 arg0, T1 arg1, T2 arg2, T3 arg3);

template <T0, T1, T2, T3, T4>
void call(T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4);

[...]
Run Code Online (Sandbox Code Playgroud)

函数内的参数都被视为相同(作为单参数模板函数的参数).这是一个库,所以我可以接受额外的努力,如果这意味着更少的工作量或更愉快的库用户界面.

我不得不为不同的项目多次这样做,而且我非常厌倦必须手动手动编写所有这些项目.当我事先不知道使用该库的项目所需的最大参数数量时,情况会变得更糟.

在我开始编写Python脚本以生成所有重载之前,是否有一些元编程方法让编译器为我做这件事?

c++ templates metaprogramming

7
推荐指数
2
解决办法
927
查看次数

编写程序在服务器上运行,请求经验丰富的建议

我正在开发一个需要在Internet服务器上运行的程序(一个后端组件将被多个跨平台程序使用).我熟悉要采取的安全预防措施(例如,防止缓冲区溢出和SQL注入攻击),但之前从未编写过服务器程序,或者在此规模上使用的任何程序.

该计划需要能够同时为数百或数千个客户提供服务.这些协议是为处理速度和最小化必须交换的数据量而设计的,服务器端将用C语言编写.将有来自相同代码的Windows和Linux版本.

问题:

  • 程序应该如何处理通信 - 多个线程,依次处理所有套接字的单个线程,或者为每个这么多的传入连接(或每个传入连接)产生一个新进程?
  • 我是否需要担心内存碎片等问题,因为这个程序需要一次运行几个月?
  • 对于桌面和移动系统的跨平台程序的经验丰富的开发人员可能没有意识到这些特定于此类编程的其他设计问题?

请不要使用其他语言的建议.我已经做出了这个决定,原因是我不能自由进入.

c

7
推荐指数
1
解决办法
167
查看次数

需要隐藏Android"概述屏幕"中的程序内容

我正在为安全意识的雇主开发Android应用程序.他担心概述屏幕(也就是最近的任务列表)上出现的屏幕快照会泄漏敏感信息,并希望我在系统拍摄之前放置程序的启动画面.不幸的是我没有找到任何办法.

我试过的事情:

  • onPause功能中为启动画面的视图充气.(没有效果,即使有bringToFrontsetVisibility(View.VISIBLE).)
  • 充气闪屏的视图中onCreate,并使用bringToFrontonPause.(再一次,没有效果.)
  • 呼叫setVisible(false)onPause.(看起来几乎可以工作,因为当切换到程序时,屏幕会立即闪烁为黑色,但在快照之前,系统显然会再次显示它.)
  • 调用setVisibility(View.INVISIBLE)View中最顶层的项目onPause.(看起来它会起作用,但快照显然是在它生效之前拍摄的.)

我是一个中等成熟的Android开发人员,但我不禁觉得有一个我想念的简单解决方案.

android

7
推荐指数
2
解决办法
4445
查看次数

为什么Boost库会返回"可转换为`bool`"的东西,而不仅仅是返回`bool`s?

有几次,在仔细阅读Boost库的文档时,我遇到了标记为" 可转换为bool "的返回值(在该页面中搜索"convertible to bool",它大约是三分之一).我曾经偶然发现了一篇文章的斜向引用,解释了原因,但从未能找到所述论文(而且我再也找不到我所看到的参考页面).

任何人都可以解释为什么(以及何时)你应该返回"可兑换bool"的东西,而不是简单地返回一个bool

c++ boost

6
推荐指数
2
解决办法
1288
查看次数

混合"替代"与"选项"时的Boost.Spirit错误?

我只使用Boost.Spirit(来自Boost 1.44)三天,试图通过RFC2822中的确切语法解析原始电子邮件.我以为我开始理解它并到达某个地方,但后来我遇到了一个问题:

#include <iostream>
#include <boost/spirit/include/qi.hpp>

namespace qi = boost::spirit::qi;
using qi::omit;
using qi::repeat;
using std::cout;
using std::endl;

typedef qi::rule<std::string::const_iterator, std::string()> strrule_t;

void test(const std::string input, strrule_t rule) {
    std::string target;
    std::string::const_iterator i = input.begin(), ie = input.end();

    if (qi::parse(i, ie, rule, target)) {
        cout << "Success: '" << target << "'" << endl;
    } else {
        cout << "Failed to match." << endl;
    }
}

int main() {
    strrule_t obsolete_year = omit[-qi::char_(" \t")] >> repeat(2)[qi::digit] >>
        omit[-qi::char_(" \t")];
    strrule_t …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit boost-spirit-qi

6
推荐指数
1
解决办法
736
查看次数

传递关键字参数

我有一个需要"通过"特定关键字参数的类函数:

def createOrOpenTable(self, tableName, schema, asType=Table):
    if self.tableExists(tableName):
        return self.openTable(tableName, asType=asType)
    else:
        return self.createTable(self, tableName, schema, asType=asType)
Run Code Online (Sandbox Code Playgroud)

当我调用它时,我收到如下错误:

TypeError: createTable() got multiple values for keyword argument 'asType'
Run Code Online (Sandbox Code Playgroud)

有没有办法"通过"这样的关键字参数?

我想到了几个答案,但没有一个是最优的.从最差到最好:

  • 我可以在一个或多个函数上更改关键字名称,但我想对所有三个函数使用相同的关键字,因为该参数具有相同的含义.

  • 我可以asType按位置而不是按关键字传递参数,但如果我将其他关键字参数添加到openTablecreateTable,我必须记住更改调用.我宁愿它自动适应,就像我可以使用关键字形式一样.

  • 我可以在**args这里使用表单来获取关键字参数的字典而不是使用默认参数,但这似乎是使用大锤来拍打飞行(因为需要额外的代码行才能正确解析它).

有更好的解决方案吗?

python

5
推荐指数
3
解决办法
2944
查看次数

以编程方式确定Linux中的各个屏幕宽度/高度(带Xinerama,TwinView和/或BigDesktop)

我正在开发一个侧面项目来在GNOME下在多个屏幕上显示多个壁纸(这显然是GNOME本身或其他任何东西都无法完成的).我已经想出了如何做它的主要部分(使用ImageMagick组件,为了好奇); 我正在尝试自动化配置系统.

要做到这一点,我需要一种方法来确定各个屏幕的尺寸.任何人都可以给我一个暗示在哪里寻找它?我假设X服务器本身有信息,但我不确定我的程序可以如何要求它.

linux gnome multiple-monitors xorg

4
推荐指数
2
解决办法
2787
查看次数

无模式,无父对话的wxDialog仍然总是在z-order的wxFrame窗口之上?

我的程序打开一个基于wxFrame的窗口和多个无模式和无父对话的基于wxDialog的窗口.除了基于wxDialog的窗口始终位于基于wxFrame的窗口之外,它一切都很好用.

我知道wxDIALOG_NO_PARENT,我正在使用它.当我关闭wxFrame时,对话框保持打开状态,因此他们肯定没有将wxFrame窗口作为父窗口.

(如果重要的话,我正在使用C++,wxWidgets 2.8.something,并在Ubuntu Linux上运行.我的程序还没有准备好在任何其他平台上编译,所以我还没有在其他平台上测试它.)

我希望所有窗口完全独立运行,因此用户可以使用wxFrame窗口以及wxDialog窗口.谁能指出我正确的方向?

c++ gtk wxwidgets z-order

3
推荐指数
1
解决办法
1761
查看次数

使用伪参数的C++类成员函数

我知道你可以使用一个虚拟的"int"参数operator++operator--覆盖这些运算符的后缀版本,但我隐约回想起一些你可以在析构函数上声明的虚拟参数.有谁知道这件事,如果有的话,那个虚拟参数做了什么?

这是我在我十几岁时(即很久以前)读过的旧Turbo C++教程书籍,所以我可能会完全记错了.这也是非常早期的C++,在它被标准化之前,所以它可能是特定于Turbo C++的东西.

c++ parameters destructor

2
推荐指数
2
解决办法
4234
查看次数