小编4ZM*_*4ZM的帖子

initializer_list和模板类型推导

考虑功能:

template<typename T>
void printme(T&& t) {
  for (auto i : t)
    std::cout << i;
}
Run Code Online (Sandbox Code Playgroud)

或任何其他期望一个参数具有begin()/ end()启用类型的函数.

以下为什么违法?

printme({'a', 'b', 'c'});

当所有这些都合法时:

printme(std::vector<char>({'a', 'b', 'c'}));
printme(std::string("abc"));
printme(std::array<char, 3> {'a', 'b', 'c'});
Run Code Online (Sandbox Code Playgroud)

我们甚至可以这样写:

const auto il = {'a', 'b', 'c'};
printme(il);
Run Code Online (Sandbox Code Playgroud)

要么

printme<std::initializer_list<char>>({'a', 'b', 'c'});
Run Code Online (Sandbox Code Playgroud)

c++ templates initializer-list c++11

34
推荐指数
3
解决办法
7447
查看次数

O(1)内存中的随机序列迭代?

假设您想以随机顺序迭代序列[0到n],只访问每个元素一次.有没有办法在O(1)内存中执行此操作,即不创建[1..n]序列std::iota并运行它std::random_shuffle

某种迭代器以随机顺序吐出序列将是最佳的.

要求是应该可以通过选择另一个种子来获得另一个随机顺序.

c++ complexity-theory iterator stl permutation

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

将状态作为参数传递给环处理程序?

如何最方便地将状态注入环处理程序(不使用全局变量)?

这是一个例子:

(defroutes main-routes
  (GET "/api/fu" [] (rest-of-the-app the-state)))

(def app
  (-> (handler/api main-routes)))
Run Code Online (Sandbox Code Playgroud)

我想the-state进入compojure处理程序main-routes.状态可能类似于使用以下内容创建的地图:

(defn create-app-state []
  {:db (connect-to-db)
   :log (create-log)})
Run Code Online (Sandbox Code Playgroud)

在非环形应用程序中,我将在main函数中创建状态,并开始将其作为函数参数注入到应用程序的不同组件中.

:init不使用全局变量的情况下,可以使用ring 函数完成类似的操作吗?

dependency-injection clojure compojure ring

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

用android解锁mifare标签

我正在寻找一种方法将解锁序列从Android手机发送到中国制造商的Mifare标签,该标签使得具有可写块0的那个.

我一直在尝试连接+收发方法,发送50 00 + 40 + 43字节序列.但那不行.

我尝试过私有收发功能(绕过错误检查),但这也行不通.我从nfc服务中得到错误.

有没有人成功发送解锁序列来解锁block0?

android nfc mifare

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

C#抽象方法只用基类实现?

请考虑以下问题:

你有一个类'A'作为许多其他类似类的基类,例如.一个叫B的班级

A类在它自身中很有用(并且已经在整个地方使用过),因此不是抽象的.

关键在于您现在希望强制执行一个新协议,要求所有继承自A(包括A本身)的类实现方法'func()'.如果子类忘记实现func(),则应该存在编译器错误.

class A {
  A func() { ret new A(...) }
}

class B : A {
  A func() { ret new B(...) }
}

class C : A {
  // Should give error : no func()
}
Run Code Online (Sandbox Code Playgroud)

问题清楚了吗?我不能创建A :: func()抽象,因为我希望能够继续使用A作为具体类.我无法使其成为虚拟,因为这会导致子类回退到超类(而不是给编译器错误).

接近解决方案的唯一方法是创建一个新的抽象类A*并使所有自定义类型继承自该类,并将A的所有当前用法替换为具有继承自A*的新类"DefaultA"的具体类.这看起来很乱.请告诉我还有其他方法可以做到这一点吗?

c# architecture oop inheritance

7
推荐指数
2
解决办法
3562
查看次数

如何在C#中实现取消共享任务:s

所有这些都是关于在C#中取消任务的复杂案例的设计/最佳实践的问题.如何实现共享任务的取消?

作为一个最小的例子,我们假设以下内容; 我们有一个长期运行,可合作取消的"工作"操作.它接受取消令牌作为参数,如果已被取消则抛出.它在某个应用程序状态下运行并返回一个值.其结果由两个UI组件独立完成.

虽然应用程序状态未更改,但应缓存Work函数的值,并且如果一个计算正在进行,则新请求不应该开始第二次计算,而是开始等待结果.

任何一个UI组件都应该能够取消它的任务,而不会影响其他UI组件任务.

你到目前为止和我在一起吗?

上面的内容可以通过在TaskCompletionSources中引入一个包装真实Work任务的Task缓存来完成,其任务:然后返回给UI组件.如果UI组件取消了它的Task,它只会放弃TaskCompletionSource Task而不是底层任务.这一切都很好.UI组件创建CancellationSource,取消请求是正常的自顶向下设计,底部是协作TaskCompletionSource任务.

现在,到了真正的问题.应用程序状态更改时该怎么办?让我们假设让"工作"功能在状态副本上运行是不可行的.

一种解决方案是监听任务缓存中的状态变化(或那里).如果缓存具有底层任务使用的CancellationToken,即运行Work函数的任务,则可以取消它.然后,这可以触发取消所有附加的TaskCompletionSources Task:s,因此两个UI组件都将获得Canceled任务.这是一种自下而上的取消.

有没有一种首选的方法呢?是否有一种设计模式将其描述在哪里?

可以实现自下而上取消,但感觉有点奇怪.UI任务是使用CancellationToken创建的,但由于另一个(内部)CancellationToken而被取消.此外,由于令牌不相同,因此不能在UI中忽略OperationCancelledException - 这会(最终)导致在外部Task:s终结器中抛出异常.

c# multithreading cancellation

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

如何在Clojure中构建复杂的"状态更新函数"?

我有一个游戏状态表示为地图和一些逻辑,在每个游戏'tic'上更新状态.但我无法弄清楚如何以任何理智的方式构建更新功能.

构造这样的函数的惯用模式是什么?

这是我想要做的一些伪代码:

(defn tic [g] "Return an updated game"
  g1 = (update-in g [:day] inc)
  g2 = (if (some-cond) (some-update-func g1) g1)
  g3 = (update-in g2 [:fu] fu-update)
  ... many more ...
  g-last)
Run Code Online (Sandbox Code Playgroud)

我并不真正关心中间状态,但使用 - >宏不起作用(因为有一些条件).

有效的黑客正在使用重置的本地原子!对于更新功能中的每个"行".但这不可能是它应该如何完成的?!

design-patterns functional-programming clojure

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

在不运行函数的情况下检查 Clojure 前提条件?

我有一个函数可以完成一些(可能很长)工作(defn workwork [x] ...),还有一些其他函数可以提前检查调用是否会成功(defn workwork-precondition-1 [x] ...)

workwork每次调用时都应评估前置条件函数(例如使用:pre)。前置条件函数也应该在单个函数中收集(和:ed)并直接供客户端代码使用(例如禁用按钮)。

在 Clojure 中解决此问题同时避免代码重复的惯用方法是什么?

特别是,有没有办法在不运行函数体的情况下评估函数的前提条件?

idioms clojure preconditions

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