小编dav*_*vka的帖子

typedef'ing函数*签名*(不是指针),以便可以重用?

编辑:动机

假设我将Handler类定义为

class Handler {
public:
  class Message { /*...*/ };
  typedef int (*Callback)(Message *msg);
  void registerCallback(int msgclass, Callback f);
};
Run Code Online (Sandbox Code Playgroud)

客户可以做到

int f1(Handler::Message *msg)
{ /* handle message */ }

int f2(Handler::Message *msg)
{ /* handle message */ }

int main(){
  Handler h;
  h.registerCallback(1, f1);
  h.registerCallback(2, f2);
  // ....
}
Run Code Online (Sandbox Code Playgroud)

编译器确实会检查它f1并且f2适合作为参数registerCallback,但是,由客户端来定义f1f2正确.由于我已经完成了typedef编辑Callback,我希望客户能够使用它.

结束编辑

我想做这样的事情:

typedef int arithmetic(int i, int j);

arithmetic sum
{
 return i+j;
} …
Run Code Online (Sandbox Code Playgroud)

c++ syntax typedef function-pointers

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

如何在没有(L)GPL库的情况下在Python中创建双重身份验证HTTPS客户端?

客户端和服务器都是内部的,每个都有一个由内部CA和CA证书签名的证书.我需要客户端根据它拥有的CA证书验证服务器的证书.它还应将其证书发送到服务器进行身份验证.

urllib2的手册说,不进行服务器身份验证.PycURL是一种天然替代品,但其许可证尚未获得批准.我也不想从源代码编译库,而是使用RPM代替.

我查了一堆像请求,httplib2这样的库,看不到我需要的东西.还有ssl模块,但如果我不是绝对必须,我不想自己实现http.

RHEL 5.7上的Python 2.6

python authentication ssl https ssl-certificate

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

如果我不能"重新整合",我怎样才能"强行"分支在树干上?

我们从主干创建了一个分支,在主干上进行了重大的重构.同时,主干进行了一些修改,并进行了一些修复.我们希望在分支上进行这些更改,因此我们不希望"追赶"将主干合并到分支,因为我们不希望混合旧代码和新代码.但如果没有这个,我就无法将分支重新整合回主干.

有没有办法将树枝"按原样"强行放在树干上?

(我考虑的一个想法是撤销("反向合并")主干回到分支开始的修订版,然后将它合并到分支上是安全的 - 什么都不应该发生.然后我可以重新集成.你怎么看? ?)

svn merge branch

5
推荐指数
1
解决办法
3782
查看次数

字符96 HEX在互联网协议/格式中是否有任何特殊含义?

抱歉这个模糊的主题,问题是这样的:

我在谷歌日历中创建了一个受邀者的活动; 在接收方,一封电子邮件以multipart形式到达,在其text/html块中,它具有以下文本(引用 - 可编码)

6月9日星期三下午1点= 96 2p =
m

我用google搜索了= 96并且找不到任何东西.(charset或这个块是windows-1252,BTW)

非常感谢!

html email-formats

5
推荐指数
1
解决办法
7639
查看次数

寻找具有顺序访问的独立内存数据服务器

我们需要一个具有以下特征的内存数据结构/ DB 服务器:

  1. 独立服务器:将与客户端在同一台机器上运行,因此任何类型的IPC都可以
  2. 顺序访问:get next/previous key
  3. 每条记录有两个键(字符串):实际上是一种双向映射
  4. 在内存中:应该有没有持久性的选项
  5. RAM磁盘/ tmpfs解决方案是不可取的
  6. SQL/ODBC是一个选项,但不是必需的
  7. 商业产品好,如果OEM许可证价格合理

到目前为止,我们已经考虑了以下选项,但还没有满意的解决方案:

  • mysql:满足所有要求,但现在回答OEM许可证的费用
  • memcached,cassandra:没有顺序访问,根据在线文档
  • Redis:看起来是一个不错的工具,但同样,我没有看到get nex/prev规范
  • Postgres:无法在Linux/ODBC上运行良好

似乎所有nosql内存数据库都只提供密钥,哈希表样式的直接访问.尚未检查Apache Derby.

我们在Linux上运行,客户端使用C++.

很高兴得到你的建议.谢谢!

编辑:似乎我们将追求mysql选项,我们有一个合理的价格优惠,它也将作为我们的主(持久)数据库有用.感谢所有答案,通常很难只选择一个.

c++ database linux nosql in-memory-database

5
推荐指数
1
解决办法
613
查看次数

用于创建用户友好的命令行提示的工具?

我注意到,一些程序(例如sqlite,mysql客户端)提供一个命令行提示,是在功能非常相似bash的,其中包括:

  • 用左右箭头编辑行,删除,插入,^ K等
  • 使用向上和向下箭头浏览历史记录
  • ^ R用于命令历史中的反向i-search

这让我觉得他们正在使用相同的工具集.

我想在我的程序中创建一个具有类似功能的提示,我可以使用哪些工具?我更喜欢它具有与之相同的功能bash,以便用户熟悉它.

c++ bash command-prompt user-friendly

5
推荐指数
1
解决办法
321
查看次数

为const引用成员分配temp会导致分段错误

通过一个例子更好地解释:

tok.h

#include <string>

static const char* defaultDelim = ".,;";

class Tokenizer {
public:
    Tokenizer():
        // 'delim' is the const ref member that is initialized by the temp string 
        delim( (altDelim.size())? altDelim : std::string(defaultDelim) ) 
    {}

    size_t scan(const std::string& str)
    { return str.find_first_of(delim); }

    static void setDelim(const std::string& d) { altDelim = d; }
private:
    static std::string altDelim;
    const std::string& delim;
};
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>
using namespace std;

#include "tok.h"

std::string Tokenizer::altDelim;

int main()
{
    Tokenizer tok;

    size_t pos = …
Run Code Online (Sandbox Code Playgroud)

c++ constructor const-reference temporary-objects

5
推荐指数
1
解决办法
295
查看次数

在一个非常大的表中有效地为每个组选择最新行?

我有(例如)一张桌子Users (user_id, status, timestamp, ...)
我还有另一张桌子SpecialUsers (user_id, ...)

我需要显示每个特殊用户的最新状态。

问题是该Users非常非常大(超过 500亿行)。例如,这个问题中的大多数解决方案只是挂起或出现“磁盘已满”错误。

SpecialUsers表要小得多 - “仅”600K 行。

SELECT DISTINCT ON()不支持。使用 Amazon RedShift。

编辑:每个请求查看失败的尝试 - 导致磁盘已满错误的其中之一如下所示:

with users_with_status (user_id, status, timestamp)
as (
        select su.user_id, u.instance_type, u.timestamp
        from specialusers su
        join users u on su.user_id = u.user_id
)
select l.instance_id, l.instance_type
from users_with_status l
left outer join users_with_status r
     on l.user_id = r.user_id and l.timestamp < r.timestamp
where …
Run Code Online (Sandbox Code Playgroud)

sql query-optimization greatest-n-per-group amazon-redshift

5
推荐指数
1
解决办法
1802
查看次数

重载运算符删除,或者如何杀死一只猫?

我正在尝试重载operator delete,这样我就可以返回一个普通的指针,指向那些不希望使用智能指针的人,并且能够控制删除对象的时间.

我定义了一个由几个灵魂构造的类Cat,有一个重载的操作符删除,什么都不做,以及析构函数减少了灵魂的数量(并且还做了一些吹牛).当灵魂达到0时,析构函数调用global :: delete,然后cat死掉.

这听起来很简单,但不能按预期工作.这是代码:

class Cat {
public:
    Cat(string n): name(n), souls(9)
    { cout << "Myaou... " << name << " is born\n"; }

    ~Cat();
    void operator delete(void *p) { cout << "!!! operator delete called\n"; }
    void report()
    { cout << name << "'s here, " << souls << " souls to spend\n"; }

    friend ostream& operator<< (const ostream& o, const Cat& cat);
private:
    void kill();
    const string name;
    int souls;
};

Cat::~Cat()
{
    cout << "!!! …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading reference-counting

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

如何访问Hudson的"控制台输出"?

我有一个在Hudson构建系统下运行的构建bash脚本,该脚本编写自己的日志文件.但是,Hudson捕获它执行的构建脚本的所有stdout和stderr,并将其显示为构建的"控制台输出".此外,此输出将保存在构建历史记录中.

如何从脚本本身访问此"控制台输出"?我想1)将它与工件一起保存为日志; 2)将其附加到通知电子邮件中.谢谢

linux shell build-automation continuous-integration hudson

4
推荐指数
1
解决办法
7743
查看次数