我想要一个简洁安全的干净/紧凑模式rulesKey,即使抛出某些东西也会妥善处理.这似乎是不可能的using(除非可能4 using秒,但看起来如此冗长并打开额外的资源,我甚至可能不需要打开).让我感到惊讶的是,这在C++中会如此直接/轻松.有一个很好的解决方案吗?
{
RegistryKey rulesKey = null;
rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Company\\Internal\\Product");
rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Company\\Company\\Internal\\Product");
rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Company\\Product");
rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Company\\Product");
// Code using rulesKey, might throw
rulesKey.Close();
}
Run Code Online (Sandbox Code Playgroud) 我正在考虑解决这个问题,但它看起来是一项相当艰巨的任务.如果我自己拿这个,我可能会用几种不同的方式写出并选择最好的,所以我想我会问这个问题,看看是否有一个很好的图书馆可以解决这个问题,或者是否有人有想法/建议.
void OffsetMemCpy(u8* pDest, u8* pSrc, u8 srcBitOffset, size size)
{
// Or something along these lines. srcBitOffset is 0-7, so the pSrc buffer
// needs to be up to one byte longer than it would need to be in memcpy.
// Maybe explicitly providing the end of the buffer is best.
// Also note that pSrc has NO alignment assumptions at all.
}
Run Code Online (Sandbox Code Playgroud)
我的应用程序是时间关键的,所以我想以最小的开销来确定这一点.这是困难/复杂性的根源.在我的情况下,块可能非常小,可能是4-12个字节,因此大规模的memcpy东西(例如预取)并不重要.对于随机未对齐的src缓冲区,最好的结果是对于常量'大小'输入最快的长度,在4到12之间.
任何人拥有或知道类似实施的东西?或者有人想要写这篇文章,让它尽可能干净和高效吗?
编辑:似乎人们对"过于宽泛"的投票表示"接近".一些缩小的细节将是AMD64的首选架构,所以我们假设.这意味着小端等等.实现有望完全符合答案的大小,所以我不认为这太宽泛了.即使有一些方法,我也会一次要求单个实现的答案.
例如,如果我传入std::less,我希望它创建一个行为等于 的新比较器std::greater。用于模板。
可以启用类似语法std::map<int, int, std::invert<std::less>>的东西(除非我正在寻找的东西存在,那不是它的名字)。这存在吗?
我发现自己需要一个简单的通用接口,我写了它,但结果却是世界上最简单的接口.我想知道它是否已经存在其他名称.我只是想确保我不会重新发明已经包含在.NET框架中的东西.
interface IReceiver<T>
{
void Receive(T obj);
}
Run Code Online (Sandbox Code Playgroud)
我无法找到.NET附带的"标准"接口的良好列表.这个界面的结构对任何人来说都很熟悉吗?我是否重新设计了已经标准的东西?
编辑:我有一个数据对象和许多对接收数据感兴趣的对象.对接收数据感兴趣的对象实现接口,因此"路由"列表和映射可以将数据发送给它们.这个想法是在路由中完全概括,路由将是数据驱动的.
我想要类似的东西IEnumerable.FirstOrDefault,但我希望返回默认值length != 1.有点像v.Count() == 1 ? v[0] : default.但我更愿意在不将整个枚举转换为数组的情况下完成它.获得此行为的最佳方法是什么?
作品:
std::chrono::duration<unsigned long long> test1 = std::chrono::seconds(1);
不起作用:
std::chrono::duration<unsigned long long> test2 = std::chrono::milliseconds(1);
为什么会有所不同?持续时间内部没有足够的粒度吗?
从毫秒值初始化持续时间的首选方法是什么?
我想要一个复制例程,它接受可能的只读文件,但复制的目标文件总是不是只读的.问题是知道写入文件的路径,以便将其更改为不可读.我不小心碰到一个没有被这个复制例程移动的文件,所以我不能只读取目标路径下的所有内容.我是否真的自己重建了每个写入的文件路径,所以我可以在其上调用set-itemproperty?
是否有任何干净的方法来实现像Copy-Item-StripReadOnly"F:\*""G:\"这样的函数,这样就不会有任何写入G的内容与readonly一起出现,而其余的G:\没有被触及?
c# ×3
c++ ×3
.net ×1
c ×1
c++-chrono ×1
comparator ×1
generics ×1
ienumerable ×1
interface ×1
linq ×1
memcpy ×1
optimization ×1
powershell ×1
registry ×1
std ×1
templates ×1
using ×1