小编FCR*_*FCR的帖子

递归变量声明

我刚刚在愚蠢/ ManualExecutor.h中看到了这个黑魔法

TimePoint now_ = now_.min();
Run Code Online (Sandbox Code Playgroud)

在我对整个库源代码进行grep之后,我还没有看到now_除此处之外的其他任何变量的定义.这里发生了什么事?这实际上是某种递归变量声明吗?

variables recursion c++11 folly

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

不必要地使用未命名的命名空间C++

我一直在公司里看到这样的代码:

namespace {

const MAX_LIMIT = 50;
const std::string TOKEN = "Token";

}
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么你需要一个匿名命名空间.一方面,您需要MAX_LIMITAND 的本地翻译单元TOKEN.但是,由于这个原因,没有匿名命名空间就已经实现了const.static const而且简单const都实现了本地翻译单元.

另一方面,如果文件中的某个地方有一个名为相同的变量,则没有命名冲突.

int foo()
{
std::string TOKEN = "MyToken"; // Clash! ::TOKEN vs TOKEN can be used.
}
Run Code Online (Sandbox Code Playgroud)

这将证明匿名命名空间的合理性.但是,您在函数中需要一个变量名称的频率实际上是在函数const外部声明的变量吗?我的回答永远不会.所以在实践中,对我来说不需要未命名的命名空间.任何提示?

c++ namespaces anonymous unnamed-namespace

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

空重写C ++ 11

具有观察者模式。

class Observer
{
   virtual eventA()=0;
   virtual eventB()=0;
    ...
   virtual eventZ()=0;
}
Run Code Online (Sandbox Code Playgroud)

Observer类不能更改,但是我的类仅对事件B感兴趣。因此,我需要:

class MyObserver{
    eventA() override {}
    eventB() override { /* Do something */ }
    eventC() override {}
    ...
    eventZ() override {}
}
Run Code Online (Sandbox Code Playgroud)

清空所有事件的开销,特别是如果您有一个始终要在cpp文件中实现的策略(显然是模板除外)时,这是开销。

C ++ 11是否为此提供任何关键字?喜欢

...
eventC() override = empty;
...
Run Code Online (Sandbox Code Playgroud)

这样,我就不需要在CPP文件中添加空的实现。

c++ overriding listener c++11

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

规则引擎:最适合嵌入式系统

我一直在研究规则引擎,这些规则引擎更适合在嵌入式系统上运行。系统将从传感器收集信息,并根据该信息进行特定的C / C ++调用。一个例子是:

IF RainSensor.value > RainSensor.threshold 
THEN call( GarageWindow::close())
Run Code Online (Sandbox Code Playgroud)

作为GarageWindow的C ++类,位于链接到规则引擎库的二进制文件中。

我不能对上述嵌入式系统的功能做出任何假设。要求是:

  • 最小的占地面积。
  • 随身携带
  • 能够进行函数调用(从其RHS进行C / C ++调用)。
  • 应该在运行时接受新规则。

我需要根据其功能(在以后定义)中给出其他选择,这些假设是:

1)嵌入式系统不支持任何内容(不支持JVM,不支持python等):

CLIPS作为C库或clipsmm作为C ++库。两者均可用于商业应用(clipsmm的GPL)。

优点:开源。很好的测试/记录。可移植,可在低内存占用情况下运行。可以从其RHS部分调用C或C ++函数。规则引擎很可能需要与C或C ++软件进行交互。

缺点:它不是线程安全的。它仅支持正向链接。

2)系统支持python:

PyClips:

到CLIPS的Python接口。功能保持与以前的情况相同。仅当需要在RHS部分中进行python调用时,使用此选项才有好处。我错过任何优点/缺点吗?

3)系统支持JVM:

杰西

优点:与Java对象的良好集成。类似于CLIPS的脚本语言。向前和向后链接。自动侦听Java对象以修改插槽。

缺点:许可。只能在编译时定义新类。

流口水

优点:开源。记录下来。Java集成。向前和向后链接。

缺点:它更适合在网络上工作(这是我的印象)。

在嵌入式环境中,Drools vs Jess有什么优势?

两者都只能在编译时添加新类。CLIPS可以在运行时。另一方面,如果更新剪辑实例的C ++代码很旧,则直接在CLIPS中创建的任何新类都不会与调用C ++代码中的任何其他类匹配。因此,重新编译Java选项的弊端并非如此。

还有其他我完全缺少的适用于嵌入式系统的引擎吗?

c++ rule-engine drools clips jess

5
推荐指数
0
解决办法
2143
查看次数

如何在 nginx 代理中添加 api 密钥身份验证?

有没有办法配置https://hub.docker.com/r/jwilder/nginx-proxy/以通过硬编码 api 密钥添加基本身份验证?

我只能找到 NGINX 控制器和 NGINX Plus 的示例,令我有点惊讶的是,对于开源 NGINX 的这种非常常见的用例,没有太多示例。

NGINX Plus 的示例在这里:https ://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/

authentication nginx api-key docker

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