小编dav*_*vka的帖子

const和非const函数的重载如何工作?

stl充满了这样的定义:

iterator begin ();
const_iterator begin () const;
Run Code Online (Sandbox Code Playgroud)

由于返回值不参与重载分辨率,因此这里唯一的区别就是函数的存在const.这是超载机制的一部分吗?什么是编译器解析线的算法,如:

vector<int>::const_iterator it = myvector.begin();
Run Code Online (Sandbox Code Playgroud)

c++ overloading const

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

什么rpmbuild警告"文件列出两次"实际上意味着什么?

我需要为包中的一个主要目录指定公共属性,并为其中一些子目录指定特殊权限.例如

%files
%attr(-, myuser, mygroup) /opt/myapp 
%attr(750, myuser, mygroup) /opt/myapp/bin  # no exec permission to other
/etc  # this is the reason I can't use %defattr(-, myuser, mygroup)
Run Code Online (Sandbox Code Playgroud)

我自然地在/ opt/myapp/bin下的每个文件上收到"文件列出两次"警告.我的问题是,它究竟意味着什么?rpmbuild用它做什么?我无法在任何地方找到答案.我可以忽略它吗?什么优先,第一次或最后一次?

我不想myapp明确列出所有内容来解决这个问题.还有其他方法吗?谢谢

installation rpm rhel software-packaging rpmbuild

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

为什么不捕获块共享try块的范围?

令人惊讶的是,我无法通过谷歌搜索和搜索SO找到答案(在SO上有很多类似的问题,但与其他语言有关).

我怀疑答案是肯定的no.如果是这样,会有明显的不便,例如

try
{
  std::string fname = constructFileName(); // can throw MyException
  ofstream f;
  f.exceptions(ofstream::failbit | ofstream::badbit);
  f.open(fname.c_str());
  // ...
}
catch (ofstream::failure &e)
{
  cout << "opening file " << fname << " failed\n"; // fname is not in the scope
}
catch (MyException &e)
{
  cout << "constructing file name failed\n";
}
Run Code Online (Sandbox Code Playgroud)

如果我的假设是正确的,你如何处理这个?通过std::string fname;移出try,我想?

我理解范围是由一个{}块定义的,但这似乎是一个合理的例子,例如,嗯.是否抛出异常导致对象无法完全构造的原因是什么?

c++ error-handling exception-handling try-catch

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

g ++中共享C++库之间的异常

据我所知,在C++ STD中没有定义(未定义的行为),当一个共享库在另一个共享库中引发异常时,编译的应用程序应该如何处理这种情况[共享库].G ++/Linux生成的代码表明可以在共享库之间引发异常.

我的问题是:

  1. 它是便携式的(MSVS)吗?
  2. 在哪种情况下共享库A将无法处理共享库中的异常B?[我的意思是申请会崩溃; 图书馆A知道可能的例外情况B.
  3. 我的示例中的异常处理行为是否依赖于链接器?

c++ linux g++ exception shared-libraries

13
推荐指数
1
解决办法
1881
查看次数

可以/应该转发iCal属性参数吗?

具体而言,CN(通用名称)参数,例如

ORGANIZER; CN = John Doe,Eng:mailto:jd@some.com

恕我直言,RFC对此很模糊.它是关于非常明确的属性值类型文本,但此参数,它只是说" 参数值是文本 ".无论如何,为TEXT类型指定的转义对于参数值似乎不完整(例如,':'未被转义).

非常感谢!

icalendar parsing vcalendar vcal rfc5545

11
推荐指数
1
解决办法
3254
查看次数

RPM规范文件可以"包含"其他文件吗?

RPM规范中是否有一种"包含"指令?我用谷歌搜索找不到答案.

动机:我有一个RPM规范模板,构建过程使用版本,修订版和其他特定于构建的数据进行修改.这是sed目前完成的.我认为如果规范是#include一个特定于构建的定义文件会更清晰,这个定义文件将由构建过程生成,所以我不需要在规范中搜索和替换.

如果没有include,是否有一种惯用的方法来做这个(相当常见,我相信)任务?

linux scripting rpm rpm-spec

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

我可以在Celery任务中使用泛型logging.Logger()吗?

医生说

可以使用名为"celery.task"的特殊记录器,您可以从此记录器继承自动获取任务名称和唯一ID作为日志的一部分.

这还不够.有更详细的信息吗?具体来说,它默认定义了哪些处理程序和格式字符串?我为什么要继承它呢?我可以使用通用logging.Logger()吗?从celery任务(不是Django)记录到文件的最佳做法是什么?等等谢谢.

python logging celery python-3.4

9
推荐指数
1
解决办法
1742
查看次数

如何强制Apache 2.2发送完整的证书链?

我们使用mod_proxy在反向代理模式下使用带有mod_ssl的 Apache 2.2.25 .它有一个我们用于测试目的的服务器证书,由GoDaddy发布.链中有3个证书.中间CA(Go Daddy安全证书颁发机构 - G2)并不总是在客户的可信CA列表中找到.server cert -> GoDaddy intermediate CA -> GoDaddy Root CA

与服务器的SSL连接适用于浏览器(至少对某些浏览器而言),但不适用于其他一些客户端.我们注意到我们的服务器没有使用以下命令发送完整的证书链:openssl s_client -showcerts -connect SERVER_URL:443,实际上该命令报告错误Verify return code: 21 (unable to verify the first certificate)

我们SSLCertificateFile在每个VirtualHost中使用该指令:

SSLCertificateFile certificate.crt
Run Code Online (Sandbox Code Playgroud)

certificate.crt文件包含私钥和链中的所有证书.我们试图将其拆分为以下内容:

SSLCertificateFile server.crt
SSLCertificateKeyFile server.key
SSLCertificateChainFile chain.crt
Run Code Online (Sandbox Code Playgroud)

但这并没有改变任何事情.

谢谢你的帮助!

编辑
情节变粗 - 它似乎是证书和服务器的某种组合.
(使用SSL Shopper工具进行测试)

  1. 在Apache 2.2(RHEL)上使用Daddy证书(如上所述) - 不起作用
  2. 在IIS7上相同的证书 - 工作
  3. Apache 2.2 RHEL上的客户证书(来自Comodo) - 有效

apache ssl reverse-proxy certificate mod-ssl

8
推荐指数
1
解决办法
1万
查看次数

如何检查模板的参数类型是否为完整的?

在一些std模板函数的描述中,我看到了类似的东西:

如果模板参数是整数类型,则行为是这样的.
否则,就是这样等等.

我怎么做类似的测试?也许dynamic_cast?

由于我写的功能仅供我个人使用,我可以依靠自己只提供正确的参数,但为什么错过学习的机会呢?:)

c++ templates

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

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
查看次数