我有一个为字符串赋予unique_ptr的函数。我想复制该值为lambdas并使用它来调用采用std :: string的函数。下面是我在做此事的正确方法:
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount; //3
private int spacing; //0
private boolean includeEdge; //false
public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
this.spanCount = spanCount;
this.spacing = spacing;
this.includeEdge = includeEdge;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view); // item position
int column = position % spanCount; // item column
if (includeEdge) {
outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)
if (position < spanCount) { // top edge
outRect.top = spacing;
}
outRect.bottom = spacing; // item bottom
} else {
outRect.left = spacing; // column * ((1f / spanCount) * spacing)
outRect.right = spacing; // spacing - (column + 1) * ((1f / spanCount) * spacing)
if (position >= spanCount) {
outRect.top = spacing; // item top
}
}
}
}
我要做的只是将字符串复制到新位置。不在乎那个时候的id unique_ptr。我发现this discussion似乎表明我可以执行以下操作:
void someFunc(std::unique_ptr<std::string> id) {
const std::string idStr = *id;
stream.subscribe([=](auto arg1) { arg1.invoke(idStr); });
}
但是,这实际上对我不起作用。它失败,并显示“没有可行的转换”错误。
答案 0 :(得分:1)
我有一个为字符串赋予unique_ptr的函数。我要复制该值
Permissions Binding
我要做的只是将字符串复制到新位置。
是复制指向的字符串的正确方法,是的。
...我可以执行以下操作:
void someFunc(std::unique_ptr<std::string> id) { const std::string idStr = *id;
那是错误的形式。你不能这样做。链接的问题中的示例不这样做。