考虑功能:
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) 假设您想以随机顺序迭代序列[0到n],只访问每个元素一次.有没有办法在O(1)内存中执行此操作,即不创建[1..n]序列std::iota并运行它std::random_shuffle?
某种迭代器以随机顺序吐出序列将是最佳的.
要求是应该可以通过选择另一个种子来获得另一个随机顺序.
如何最方便地将状态注入环处理程序(不使用全局变量)?
这是一个例子:
(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 函数完成类似的操作吗?
我正在寻找一种方法将解锁序列从Android手机发送到中国制造商的Mifare标签,该标签使得具有可写块0的那个.
我一直在尝试连接+收发方法,发送50 00 + 40 + 43字节序列.但那不行.
我尝试过私有收发功能(绕过错误检查),但这也行不通.我从nfc服务中得到错误.
有没有人成功发送解锁序列来解锁block0?
请考虑以下问题:
你有一个类'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#中取消任务的复杂案例的设计/最佳实践的问题.如何实现共享任务的取消?
作为一个最小的例子,我们假设以下内容; 我们有一个长期运行,可合作取消的"工作"操作.它接受取消令牌作为参数,如果已被取消则抛出.它在某个应用程序状态下运行并返回一个值.其结果由两个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终结器中抛出异常.
我有一个游戏状态表示为地图和一些逻辑,在每个游戏'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)
我并不真正关心中间状态,但使用 - >宏不起作用(因为有一些条件).
有效的黑客正在使用重置的本地原子!对于更新功能中的每个"行".但这不可能是它应该如何完成的?!
我有一个函数可以完成一些(可能很长)工作(defn workwork [x] ...),还有一些其他函数可以提前检查调用是否会成功(defn workwork-precondition-1 [x] ...)。
workwork每次调用时都应评估前置条件函数(例如使用:pre)。前置条件函数也应该在单个函数中收集(和:ed)并直接供客户端代码使用(例如禁用按钮)。
在 Clojure 中解决此问题同时避免代码重复的惯用方法是什么?
特别是,有没有办法在不运行函数体的情况下评估函数的前提条件?
clojure ×3
c# ×2
c++ ×2
android ×1
architecture ×1
c++11 ×1
cancellation ×1
compojure ×1
idioms ×1
inheritance ×1
iterator ×1
mifare ×1
nfc ×1
oop ×1
permutation ×1
ring ×1
stl ×1
templates ×1