如果我有boost::shared_array<T>(或a boost::shared_ptr<T[]>),有没有办法获得boost::shared_ptr<T>与阵列共享的内容?
例如,我可能想写:
shared_array<int> array(new int[10]);
shared_ptr<int> element = &array[2];
Run Code Online (Sandbox Code Playgroud)
我知道我不能使用&array[2],因为它只有类型int *,并且shared_ptr<int>有一个隐式构造函数将采用该类型是危险的.理想情况下shared_array<int>会有一个实例方法,如:
shared_ptr<int> element = array.shared_ptr_to(2);
Run Code Online (Sandbox Code Playgroud)
不幸的是我找不到这样的东西.有一个别名构造函数shared_ptr<int>将与另一个构造函数别名shared_ptr<T>,但它不允许别名shared_array<T>; 所以我也写不出来(它不会编译):
shared_ptr<int> element(array, &array[2]);
//Can't convert 'array' from shared_array<int> to shared_ptr<int>
Run Code Online (Sandbox Code Playgroud)
我玩的另一个选择是使用std::shared_ptr<T>(std而不是boost).专业化T[]不是标准化的,所以我想自己定义.不幸的是,我认为这实际上不可能以不破坏别名构造函数内部的方式,因为它试图将我std::shared_ptr<T[]>转换为自己的特定于实现的超类型,这是不可能的.(我目前只是从增强版继承.)这个想法的好处是我可以实现我的实例shared_ptr_to方法.
这是我尝试过的另一个想法,但我认为它不足以被接受为我们可能会在整个大型项目中使用的东西.
template<typename T>
boost::shared_ptr<T> GetElementPtr(const boost::shared_array<T> &array, size_t index) {
//This deleter works by holding on to the underlying array …Run Code Online (Sandbox Code Playgroud) 是否有Perforce的一个很好的方式提交前移动到不同的流未提交的修改(等效git stash,git checkout otherbranch,git stash pop)?
我目前在本地(非专有)检出文件并进行编辑.我已经尝试搁置它们,然后尝试将它们取消搁置到目标流中,但我得到"文件不在客户端视图中".当我查看更改列表(搁置或不搁置)时,文件都包含包含原始流的路径.
我的目标流是我刚刚创建的,是原始流的父级.我正在使用P4V.我安装的Perforce Visual Components的版本是123.57.9578,当我从命令行运行p4时,它显示"Server 2012.2/551823".如有必要,我可以添加更多信息.
例如,我可能有字符串"Hello world!",我想检查从位置6(从0开始)开始的子字符串是否为"world"- 在这种情况下为真.
像"Hello world!".Substring(6).StartsWith("world", StringComparison.Ordinal)它会做的事情,但它涉及堆分配,这对于这样的事情应该是不必要的.
(在我的情况下,如果从位置6开始的字符串太短而无法进行比较,我不想要一个边界错误 - 我只是想要假.但是,这很容易编码,所以提供边界错误的解决方案也是欢迎.)
在Java中,'regionMatches'可以用来实现这种效果(带有bounds错误),但我找不到C#中的等价物.
只是为了抢先-显然Contains并IndexOf是不好的解决方案,因为他们做不必要的搜索.(你知道有人会发布这个!)
如果所有其他方法都失败了,我可以快速编写自己的函数 - 主要是我想知道是否有一个我错过的内置函数.
例如:
for (...)
{
... std::uniform_real_distribution<float>(min, max)(rng) ...
}
Run Code Online (Sandbox Code Playgroud)
直觉上,在我看来构造函数除了存储两个值之外不需要做太多,并且在uniform _*_ distribution实例中不应该有任何状态.我自己没有对它进行分析(我还没有在项目的那个阶段),但我觉得这个问题属于那里:)
我知道这对于某些分布类型来说是个坏主意 - 例如,std::normal_distribution可能会成对生成它的数字,而第二个数字每次都会被浪费掉.
我觉得我拥有的东西比仅仅访问rng()和自己做数学更具可读性,但是如果还有其他方法可以更直接地写这个,我会感兴趣.