小编gas*_*ard的帖子

mac OS X上的原子增量

我在Mac OS X上搜索了原子增量和减量运算符并找到了"OSAtomic.h",但似乎你只能在内核空间中使用它.

Jeremy Friesner向我指出了一个跨平台的原子计数器,他们在OS X上使用汇编或互斥(据我所知,ifdefs的交错).

是不是有类似InterlockedDecrementatomic_dec()在OS X?

c++ atomic

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

const cast允许读锁定,这味道不好吗?

我想对标记为的对象执行只读方法const,但为了安全地执行此操作,我需要锁定一个reader-writer互斥锁:

const Value Object::list() const {
  ScopedRead lock(children_);
  ...
}
Run Code Online (Sandbox Code Playgroud)

但这打破了因为编译器抱怨"children_"存在const等等.我去了ScopedRead类,直到RWMutex类(这children_是一个子类)来允许read_lockconst对象,但我必须写这个:

inline void read_lock() const {
  pthread_rwlock_rdlock(const_cast<pthread_rwlock_t*>(&rwlock_));
}
Run Code Online (Sandbox Code Playgroud)

我一直都知道这const_cast是一种代码味道.有什么办法可以避免这个吗

c++ concurrency const

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

如何导入 ECDH 公钥(无法使用指定的密钥用法创建密钥)

我正在尝试使用 webcrypto 运行代码,但似乎无法导入 ECDH 公钥。我错过了什么?

我收到此错误:无法使用指定的密钥用法创建密钥

浏览器:Google Chrome 版本 71.0.3578.98(官方版本)(64 位)

(在 Firefox 上工作正常)。

window.crypto.subtle
  .generateKey(
    {
      name: 'ECDH',
      namedCurve: 'P-256',
    },
    true,
    ['deriveKey', 'deriveBits']
  )
  .then(function(key) {
    return window.crypto.subtle
      .exportKey('raw', key.publicKey)
      .then(function(ecdhPub) {
        return window.crypto.subtle
          .importKey(
            'raw',
            ecdhPub,
            {
              name: 'ECDH',
              namedCurve: 'P-256',
            },
            false,
            ['deriveKey', 'deriveBits']
          )
          .then(function(ecdhPubKey) {
            console.log('DONE !!', ecdhPubKey)
          })
          .catch(function(err) {
            console.log('COULD NOT IMPORT...')
            console.error(err)
          })
      })
      .catch(function(err) {
        console.log('COULD NOT EXPORT...')
        console.error(err)
      })
  })
  .catch(function(err) {
    console.log('COULD NOT GENERATE KEYS...')
    console.error(err) …
Run Code Online (Sandbox Code Playgroud)

webcrypto-api ecdh

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

如何使用nodegit从标签名称获取提交信息?

我有这个:

nodegit.Reference
  .lookup(repo, `refs/tags/${tagName}`)
  .then(ref => nodegit.Commit.lookup(repo, ref.target()))
  .then(commit => ({
    tag: tagName,
    hash: commit.sha(),
    date: commit.date().toJSON(),
  }))
Run Code Online (Sandbox Code Playgroud)

如果tagName只是提交的别名,则此代码有效,但是如果标记是使用nodegit创建的正确标记,则会给我一个错误:

the requested type does not match the type in the ODB
Run Code Online (Sandbox Code Playgroud)

使用git show [tagname]时显示如下:

tag release_2017-07-21_1413
Tagger: xxx
Date:   Fri Jul 21 16:13:47 2017 +0200


commit c465e3323fc2c63fbeb91f9b9b43379d28f9b761 (tag: release_2017-07-21_1413, initialRelease)
Run Code Online (Sandbox Code Playgroud)

那么,如何从该标记引用到提交本身(c465e)?

javascript nodegit

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

如何在typescript中声明一个类似于类的外部库

我尝试创建以下d.ts文件,但创建的元素的类型是any:

declare module 'jszip' {
  interface JSZip {
    (): void
    file ( name: string, data: string, opts: any ): void
    folder ( name: string ): JSZip
  }
  const dummy: JSZip
  export = dummy
}
Run Code Online (Sandbox Code Playgroud)

使用时:

import * as JSZip from 'jszip'

const zip = new JSZip ()
// zip type === any
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

typescript typescript-typings

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

Typescript相同的派生类型,但所有可选键

是否可以自动派生此接口:

interface OverrideParamType {
  foo?: FooType
  bar?: BarType
}
Run Code Online (Sandbox Code Playgroud)

从这一个

interface ParamType {
  foo: FooType
  bar: BarType
}
Run Code Online (Sandbox Code Playgroud)

用途是以以下结尾的函数:

return Object.assign ( {}, baseParams, overrideParams )
Run Code Online (Sandbox Code Playgroud)

typescript

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

如何确保成员是4字节对齐的?

为了使用OSAtomicDecrement(特定于mac的原子操作),我需要提供一个4字节对齐的SInt32.

这种烹饪有用吗?有没有其他方法来处理对齐问题?

struct SomeClass {
  SomeClass() {
    member_  = &storage_ + ((4 - (&storage_ % 4)) % 4);
    *member_ = 0;
  }

  SInt32 *member_;

  struct {
    SInt32 a;
    SInt32 b;
  } storage_;
};
Run Code Online (Sandbox Code Playgroud)

c++ atomic memory-alignment

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

如何解决C++中两个库之间的命名冲突?

我正在使用两个大型库(GUI和网络),我很乐意这样做

using namespace FirstLib;
using namespace SecondLib;
Run Code Online (Sandbox Code Playgroud)

除了Foobar名称冲突的1个单一类.

我的代码,我不使用FirstLib::Foobar.有没有办法说"在我的代码中,每当你看到Foobar,想一想SecondLib::Foobar

c++ namespaces

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