小编Sas*_*ssa的帖子

使用(或不使用)stdint的原因

我已经知道stdint用于当你需要特定的变量大小来实现平台之间的可移植性时,我现在还没有真正有这样的问题,但除了已经在上面显示的事实之外,使用它的缺点和优点是什么?

在stackoverflow和其他网站上寻找它,我找到了2个关于主题的链接:

  • 1 - 这个讨论了stdint的可移植性.

  • 2 - 这个更具体的关于uint8_t.

这两个链接非常好,特别是要了解更多关于这个标题的可移植性的主要原因,但对我来说,我最喜欢它,我认为uint8_t比unsigned char更清洁(例如存储RBG通道值) ,int32_t看起来比简单的int等更有意义.

所以,我的问题是,究竟是什么缺点,特别是除了可移植性之外使用stdint的优点,我应该只在代码的某些特定部分使用它,还是在任何地方?如果到处都是,我怎样才能使用atoi,strtok等功能呢?

谢谢!

c char stdint

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

C# 有零成本抽象吗?

我通常使用具有零成本抽象概念的语言进行编程,例如 C++ 和 Rust。

目前我正在从事一个使用C#语言的项目。所以我想知道是否可以安全地创建抽象和更高级别的代码而不影响性能。

这在 C# 中可能吗?或者对于性能关键的代码,我应该只执行尽可能低级的代码?

正如我在代码中遇到的一个例子(不要过多关注这个例子,我的问题更高级别),我需要一个返回多个值的函数,为此,我的第一个方法是使用元组,所以像这样:

public (int, int, float) Function();
Run Code Online (Sandbox Code Playgroud)

或将此元组抽象为结构:

public struct Abstraction { int value1; int value2; float value3; };

public Abstraction Function();
Run Code Online (Sandbox Code Playgroud)

我期望编译器会优化TupleAbstraction struct直接直接使用原始值。但我发现使用参数编写代码out可以提高性能:

public void Function(out int value1, out int value2, out float value3);
Run Code Online (Sandbox Code Playgroud)

我猜原因是因为在out函数中没有TupleAbstraction struct创建。

函数版本的问题out是我真的很讨厌使用参数作为返回值,因为它看起来更像是对语言限制的破解。

所以,最后我不确定我是否只是没有使用正确的配置,以便 JIT 可以使用零成本抽象,或者这在 C# 中根本不可能或无法保证。

c# optimization jit compiler-optimization

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

如何在 PostgreSQL 中存储已排序的数据

有没有办法提示 PostgreSQL 数据库以排序的方式存储数据?

例如,我有这个 SQL 架构:

create table DataHolder(
    name text,
    path ltree primary key
);

create table Datas(
    time int primary key,
    foreign_dataholder_id ltree references Exchange(path)
);
Run Code Online (Sandbox Code Playgroud)

我可以像这样填充它:

insert into DataHolder(name, path) values ('A', 'Sec1.SubSec1');
insert into DataHolder(name, path) values ('B', 'Sec1.SubSec2');
insert into DataHolder(name, path) values ('C', 'Sec2.SubSec1');
...

insert into Datas (time, foreign_exchange_id) values (1513889449, 'Sec1.SubSec1');
insert into Datas (time, foreign_exchange_id) values (1513889451, 'Sec1.SubSec1');
...
Run Code Online (Sandbox Code Playgroud)

所以我有一些 DataHolder 表,它存储一些像树一样的数据容器Sec1.SubSec1,对于每个容器,我有很多数据。

但关键部分是数据始终将其主键作为 unix 时间戳,并且始终将其作为感兴趣的时间范围区域进行查询并按升序排序。

例如:

select * from …
Run Code Online (Sandbox Code Playgroud)

sorting postgresql

6
推荐指数
0
解决办法
2258
查看次数

在我的 Android 应用 (Google Play IAP) 中向现有用户订阅添加优惠

Google Play IAP 允许开发者在应用订阅中设置试用和折扣优惠。

如果优惠是优惠,则developer determined开发人员可以向后端或前端添加逻辑,以允许用户根据某些条件订阅该优惠。

这很有效,但是如何将优惠应用于现有的订阅呢?

想象一下以下场景:

我的应用程序中有一个推荐系统,如果用户邀请某人使用该应用程序并且该人订阅了某个计划,则两个用户都将获得 20% 的折扣。

对于新用户来说,做到这一点很容易,我只需在该用户订阅期间添加该优惠即可。

但对于老用户来说,我不知道该怎么做,因为该用户已经有订阅,我在这里找不到任何 API可以让我将此优惠应用于他现有的订阅。

这有可能吗?或者是否有一些解决方法可以使像这样的推荐系统与 Google Play IAP 订阅一起使用?

android in-app-purchase google-play

6
推荐指数
0
解决办法
743
查看次数

使用哈希样式SYSV编译libstdc ++

有什么方法可以使用哈希样式SYSV而不是GNU / Linux来编译GCC的libstdc ++?我有一个工具链(通过crosstool-ng),可用于编译我们的公司库以与各种Linux系统一起使用。

这些系统之一是非常老的RedHat,它只有SYSV哈希样式,当我使用工具链编译仅C的库/程序时,由于生成的二进制文件使用了SYSV,所以它工作得很好。

但是,当我与libstdc ++链接时,二进制文件会自动更改为GNU / Linux风格,原因是因为libstdc ++是作为GNU / Linux构建的,因此出现了问题。

在此系统中运行二进制文件给我错误

ELF file OS ABI invalid
Run Code Online (Sandbox Code Playgroud)

仅出于完整性考虑,我已经尝试了-Wl,-hash-style = sysv,但没有成功。

另外,我还有另一个用于ARM系统的工具链,它们具有相同版本的GCC,GLIBC等,但是在这个工具链中,libstdc ++使用SYSV,不知道为什么。

提前致谢!

c++ linux gcc sysv

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

在没有 map_err 的情况下使用 and_then 与不同的结果错误类型

我有一些函数会在失败时返回不同的错误类型。

首先,我有一个构建器,其中包含此方法:

#[derive(Debug)]
pub enum BuilderError {
    ElementMissing(&'static str),
}

pub fn spawn(self) -> Result<ServiceStatus, BuilderError>
Run Code Online (Sandbox Code Playgroud)

所以它会BuildError在失败时返回一个。

现在,我有另一个函数会返回另一个错误:

#[derive(Debug)]
pub enum XmlError {
    XmlCreationFailed(writer::Error),
    ConversionToUtf8(FromUtf8Error),
}

pub fn create_xml(service_status: super::ServiceStatus) -> Result<String, XmlError>
Run Code Online (Sandbox Code Playgroud)

这个想法是我使用构建器创建一个ServiceStatus对象并使用它来创建一个带有create_xml函数的 XML 字符串。

为此,我有以下代码:

#[derive(Debug)]
pub enum WebserviceError {
    XmlError(XmlError),
    BuilderError(BuilderError),
}

impl std::error::Error for WebserviceError {
    ...
}

impl From<XmlError> for WebserviceError {
    fn from(error: XmlError) -> WebserviceError {
        WebserviceError::XmlError(error)
    }
}

impl From<BuilderError> for WebserviceError {
    fn from(error: BuilderError) …
Run Code Online (Sandbox Code Playgroud)

rust rust-result

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

使用大型WHERE子句进行查询会导致EF6中的npgsql超时异常

我有一个看起来像这样的查询:

private static IQueryable<MultiframeModule> WhereAllFramesProperties(this IQueryable<MultiframeModule> query, ICollection<Frame> frames)
{
    return frames.Aggregate(query, (q, frame) =>
    {
        return q.Where(p => p.Frames.Any(i => i.FrameData.ShaHash == frame.FrameData.ShaHash));
    });
}
Run Code Online (Sandbox Code Playgroud)

MultiframeModule并且Frame有多对多的关系.

使用该查询,我想找到一个MultiframeModule包含frames我作为参数发送的集合中的所有帧,为此我检查ShaHash参数.

如果frames包含2个帧,那么生成的SQL将是这样的:

SELECT
   "Extent1"."MultiframeModuleId",
   "Extent1"."FrameIncrementPointer",
   "Extent1"."PageNumberVector" 
FROM
   "public"."MultiframeModule" AS "Extent1" 
WHERE
   EXISTS 
   (
      SELECT
         1 AS "C1" 
      FROM
         "public"."Frame" AS "Extent2" 
         INNER JOIN
            "public"."FrameData" AS "Extent3" 
            ON "Extent2"."FrameData_FrameDataId" = "Extent3"."FrameDataId" 
      WHERE
         "Extent1"."MultiframeModuleId" = "Extent2"."MultiframeModule_MultiframeModuleId" 
         AND "Extent3"."ShaHash" = @p__linq__0
   )
   AND EXISTS 
   ( …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework npgsql entity-framework-6

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

如何为iOS推送通知设置自定义图标?

我目前正在为 IOS 的 Flutter 应用程序添加通知,我想添加类似于largeIconAndroid 上的通知,到目前为止我还没有找到一种方法来做到这一点,只添加一个图像,这不是解决方案,因为我只想即使用户展开通知,右侧也会出现一个图标(在这种情况下图像也会展开,这对于我的用例来说是不合需要的)。

作为替代方案,我想知道是否可以更改通知应用程序图标。据我环顾四周,这也是不可能的,但同时我看到了这张通知图像(第一个和最后一个)具有自定义图像,并且应用程序图标较小。

我如何在我的应用程序中执行此操作?我在文档中找不到任何有关如何执行此操作的方法。

在此输入图像描述

push-notification ios flutter

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

在单个 FCM 请求中具有 Android 的数据消息和 IOS 的正常通知

目前,我有不同的方式来处理通知,具体取决于系统是 Android 还是 IOS,对于 Android,我发送纯数据通知并从中创建本地通知。

对于 IOS,由于纯数据通知不能保证在应用程序关闭时能够检索到它们,因此我发送普通通知。

我想要做的是使用相同的 FCM API 调用来获取两个通知,这是我当前的 json:

{
    "data": {
        "click_action": "FLUTTER_NOTIFICATION_CLICK",
        "d": "my_data",
    },
    "apns": {
        "headers": {
            "apns-priority": "10"
        },
        "payload": {
            "aps": {
                "alert": {
                    "title": "my title",
                    "body": "my body"
                }
            }
        }
    },
    "priority": "high",
    "registration_ids": [...],
    "time_to_live":86400
}
Run Code Online (Sandbox Code Playgroud)

所以,我从这个请求中期望的是,对于 android 来说,它将使用以下命令创建一个仅数据通知:

{
    "data": {
        "click_action": "FLUTTER_NOTIFICATION_CLICK",
        "d": "my_data",
    }
}
Run Code Online (Sandbox Code Playgroud)

对于 IOS,它将使用以下命令创建普通通知:

{
    "notification": {
        "title": "my title",
        "body": "my body",
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于 Android,但我在 IOS 上没有收到此通知作为正常通知。apns在这种情况下,有效负载不应该用于 …

apple-push-notifications firebase-cloud-messaging

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

TradingView Pine Script RMA 功能如何在内部工作?

我正在尝试重新实现该rma函数,TradingView pinescript但无法使其输出与原始函数相同的结果。

下面是我开发的代码,代码基本就是ema函数,但是做图的时候和rma函数plot结果差别很大:

//@version=3
study(title = "test", overlay=true)

rolling_moving_average(data, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    for index = length to 0
        if sum == 0.0
            sum := data[index]
        else
            sum := alpha * data[index] + (1 - alpha) * sum

atr2 = rolling_moving_average(close, 5)
plot(atr2, title="EMAUP2", color=blue)

atr = rma(close, 5)
plot(atr, title="EMAUP", color=red)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是该rma函数如何在内部工作,以便我可以实现它的克隆?

附注。这是文档的链接https://www.tradingview.com/study-script-reference/#fun_rma它确实显示了可能的实现,但在运行时不起作用。

moving-average pine-script

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