解引用副本的unique_ptr值

时间:2019-06-17 20:00:21

标签: c++ smart-pointers unique-ptr

我有一个为字符串赋予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); });
}

但是,这实际上对我不起作用。它失败,并显示“没有可行的转换”错误。

1 个答案:

答案 0 :(得分:1)

  

我有一个为字符串赋予unique_ptr的函数。我要复制该值

Permissions Binding
     

我要做的只是将字符串复制到新位置。

是复制指向的字符串的正确方法,是的。

  

...我可以执行以下操作:

void someFunc(std::unique_ptr<std::string> id) {
    const std::string idStr = *id;

那是错误的形式。你不能这样做。链接的问题中的示例不这样做。