小编ben*_*ist的帖子

NSBlock的iOS NSMethodSignature(或编码)

我需要一种方法来检查运行时给定块的参数和参数类型的数量(我需要这个我正在编写的一些对象映射库,我将String格式的值映射到选择器,希望块的相同) .

我尝试了以下示例中的代码,但由于某种原因,它不适合我,并返回nil的字符串描述.

您是否知道在运行时评估块签名的方法(最好是iPhone应用商店提交的afe)?

这是我使用的代码:

struct BlockDescriptor {
unsigned long reserved;
unsigned long size;
void *rest[1];
};

struct Block {
void *isa;
int flags;
int reserved;
void (*invoke)(struct __block_literal_1 *);
struct BlockDescriptor *descriptor;
};

enum {
BLOCK_HAS_COPY_DISPOSE = (1 << 25),
BLOCK_HAS_CTOR = (1 << 26), // helpers have C++ code
BLOCK_IS_GLOBAL = (1 << 28),
BLOCK_HAS_STRET = (1 << 29), // IFF BLOCK_HAS_SIGNATURE
BLOCK_HAS_SIGNATURE = (1 << 30),
};

static const char *BlockSig(id blockObj)
{
struct Block *block = …
Run Code Online (Sandbox Code Playgroud)

encode ios objective-c-blocks

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

使用pm2监视分离的子进程

我有一个非常重要的数据节点应用程序.除了文件上传之类的常见内容之外,该应用程序还会生成分离(长时间运行)子进程.

例如,考虑用户上传文件,分离的进程触发系统上安装的本机工具进行一些繁重的处理.这可能需要几秒钟到几分钟之间的任何时间 - 因此该过程被分离并且在网站内(在线时)或通过电子邮件通知用户.

我正在考虑使用pm2作为监控工具.看起来很棒,虽然如何用它来监控个别分离的子进程?我已经阅读了大部分文档并检查了代码示例 - 但我没有找到针对我的特定问题的示例.

具体的配置示例将受到欢迎,因为我是pm2的新手.

node.js pm2

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

使用unordered_map将对象映射为键

我有一个简单的Observable类,实现了观察者模式.此类将模板类型Event映射到已注册的观察者.这一切都很好,但是由于性能原因我不想使用std :: unordered_map而不是std :: map.

如果我将下面的成员变量更改为使用unordered_map,我会得到一个相当普遍的错误:

std::map<Event, std::vector<std::function<void()>>> _observers;
Run Code Online (Sandbox Code Playgroud)

Static_assert失败"指定的哈希不符合哈希要求"

我的期望是std :: map和std :: unordered_map应该是可以互换的.在这种情况下使用unordered_map有哪些散列要求,为什么它有所不同?

这是我的代码:

#include <functional>
#include <unordered_map>
#include <map>
#include <vector>
#include <utility>

template <typename Event>
class Observable
{
public:
    Observable()=default;

    template <typename Observer>
    void registerObserver(const Event &event, Observer &&observer)
    {
        _observers[event].push_back(std::forward<Observer>(observer));
    }

    template <typename Observer>
    void registerObserver(Event &&event, Observer &&observer)
    {
        _observers[std::move(event)].push_back(std::forward<Observer>(observer));
    }

    void notify(const Event &event) const
    {
        for (const auto& obs : _observers.at(event)) obs();
    }

    /* disallow copying */
    Observable(const Observable&)=delete;
    Observable& operator=(const Observable&)=delete; …
Run Code Online (Sandbox Code Playgroud)

c++ observable c++11

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

与std :: optional nullopt等效的boost是什么?

我已经从第三方项目中导入了一些代码段到我的C ++ 11项目中。第三方项目使用optional-lite [1],尽管我在项目中大量使用Boost并希望保持对其他库的依赖性较低。

boost::optional,但是与c ++ 17对应物不同,它没有nullopt

Boost等于nullopt什么?

(注意:Boost版本为1.69)

[1] https://github.com/martinmoene/optional-lite

c++ boost

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

解决方法 --exclude-libs 在 OS X 的 clang 上不可用

我需要创建一个需要使用不同版本的 OpenSSL (BoringSSL) 的包装器库,原因请参阅“包装器共享对象”[1]。

问题是 --exclude-libs 不适用于 OS X 的 clang,因此符号被导出,这是我必须避免的。

我必须采取哪些选项来解决此问题,例如在构建库后剥离符号?

[1] https://wiki.openssl.org/index.php/Android

macos g++ clang ld clang++

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

带有环境变量的 Dockerfile Healthcheck

我有一个用 C++ 编写的 REST 服务,它有一个 localhost:somePort/health 端点。该端口在基于 yaml 的配置文件中配置。

我创建了一个从 yaml 文件中提取端口的脚本。但我的问题是将结果分配给我的 Dockerfile 中的 HEALTHCHECK 命令。

假设我有一个脚本 /app/get_port.sh 回显启动时使用的实际端口。如何将该端口传递给 HEALTHCHECK 命令?例如,要使其工作:

HEALTHCHECK --interval=10s --timeout=4s CMD curl -f "http://localhost:$MY_PORT/health" || exit 
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

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

返回const std :: string真的比非const慢吗?

在另一个问题中,用户评论说,返回const std :: string会丢失移动构造效率,并且速度较慢。

分配此方法的返回字符串是否真的正确:

const std::string toJson(const std::string &someText);

const std::string jsonString = toJson(someText);
Run Code Online (Sandbox Code Playgroud)

...确实比非const版本慢:

std::string toJson(const std::string &str);

std::string jsonString = toJson(someText);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,移动施工效率是什么意思?

我以前从未听说过该限制,并且不记得在分析器中看到过该限制。但是我很好奇。

编辑:有一个建议的问题,问:什么是移动语义?。虽然某些解释当然与效率有关,但它解释移动语义的含义,但没有解决为什么返回const值会对性能产生负面影响的原因。

c++ c++11 c++14

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

Keycloak 映射多个用户属性

我已经按照 [1] 中的指南来映射单个用户属性。但是,我需要将所有属性映射到一个数组,以便特定用户的每个属性都显示在访问令牌的属性数组中(或者更好的是,将属性限制为特定的一组属性,但我猜用户属性只是平面键/值映射)。

我尝试在客户端映射器的用户属性字段中设置通配符 *。但是无论我做什么,给定用户属性映射的实际属性键,我都可以一次设置一个属性。

[1] Keycloak 检索自定义属性到 KeycloakPrincipal

keycloak

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

树或其他数据结构最有效地查找"最近的搜索"

我认为我现在正在寻找一种树算法,但我忘记了它的名字,谷歌搜索没有帮助.

我正在寻找一种对数据具有最佳查找性能的算法.特点: - 每次查找都会受到欢迎.因此,所有被查找的密钥都存在(可能有一些未命中,但这些将被视为"错误配置",并且这种未命中的发生可以忽略不计) - 很可能(数据集针对此进行了优化)随后发生相同的查找 - 例如,密钥123可能有一百万次查找,其间可能存在单个查找密钥456,然后再次查找数百万次123.然后查找具有可能相同密钥的下一组等等

当然我可以使用哈希算法.但是出于给定的目的,我记得有一个搜索优化树,它以这样的方式优化查找,使得最近的查找位于树的最顶层.因此,您可能会直接将树的第一个节点命中为O(1),而不需要散列函数或散列存储的模数.

我正在寻求这种算法来实现mobilde设备上图形渲染的原始性能.

c++ algorithm tree data-structures

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

WKT和GeoJson之间的区别(数据解析)

我需要用C ++写一个解析器,该解析器允许我从有效的WKT字符串创建geojson几何类型。

所以,我有一个有效的WKT字符串作为输入,我需要使用Rapidjson对其进行转换并写入所有坐标等。

我想知道的是,就解析而言,Geojson和WKT是否匹配。例如,似乎Geojson多边形类型与坐标和外部/内部环的顺序匹配。

那么,就所有类型(点,线串,多多边形)的坐标顺序和内部结构而言,Geojson和WKT类型是否等效?

这将使转换变得几乎不重要。

c++ geojson wkt

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

通过引用传递的智能指针可以是 nullptr 吗?

关于通过引用传递智能指针有很多问题。我没有找到一个明确的答案:我们可以将 nullptr 传递给通过引用接受智能指针的方法吗?

例子:

void myFunc(std::shared_ptr<std::string> &myStrRef) {
   // do something
}

void main() {
   myFunc(nullptr);
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

使用父的init - 从另一个类创建类的子类

编辑:这个downvoting syndrom在这里吸引大量时间.我问了一个问题,在我看来,我做了我的功课,并征求意见.upvoted答案隐含了编译时警告,而我自己的,可能是最干净的OOP方式没有任何兴趣.

简要概述,以了解我为什么需要这个以及我尝试做什么:我正在编写一个实现数据映射器模式的ORM.映射器(即SQLite结果)必须使用基本实体类的初始化器创建实体类的子类.所以有问题.

映射器不会,也不应该知道特定的类.不同数据源的映射描述和特定映射器从实体类中抽象出来,并通过实体描述的设计部分抽象出来.

实体类似于NSManagedObject,尽管ORM遵循不同的模式.创建任何实体的描述类似于NSEntityDescription(但也遵循不同的模式和目的).

所以我的目标是使用ManagedEntity的init方法创建我知道是ManagedEntity子类的实体.

所以我的mapper的init看起来像这样:

- (id)initWithEntityClass:(Class)EntityClass entityDescriptor:(EntityDescription*)entityDescriptor
{
self = [super init];
if (self)
{
    _EntityClass = EntityClass; 
    _entityDescription = entityDescription;

    ... (assert that class is of subclass of ManagedEntity)
}
Run Code Online (Sandbox Code Playgroud)

一段时间后,在我的映射器中,我想创建具体的实体:

-(void)createEntityWithSQLiteResultSet:(sqlite3_stmt*)resultSet
{
    // Problem: How to init a class known to be a subclass of ManagedEntity?  
    ManagedEntity *newEntity = [[_EntityClass] alloc]     initWithEntityDescription:_entityDescription];
}
Run Code Online (Sandbox Code Playgroud)

那么如何使用ManagedEntity的init创建这个ManagedEntity子类呢?

当然,我可以使用respondsToSelector()进行initWithEntityDescription并调用它.但是有些东西告诉我应该有一种更优雅的方式,类已经知道了.此外,respondsToSelector和selector调用仅执行运行时检查.即使实体初始化程序不应该更改,如果此方法存在,则丢失编译时检查似乎是一个糟糕的选择.

initialization objective-c

0
推荐指数
1
解决办法
139
查看次数