小编Bla*_*cal的帖子

循环时保持对unique_ptr的引用

我想在使用循环时保持对unique_ptr的引用,这样在我离开循环后我仍然保持引用.我知道我不能创建unique_ptr的新副本(显然),所以我想做的是:

const unique_ptr<Object>& ref;
for(auto& s : stuff) {
    if(condition) {
         ref = std::move(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

我意识到这将永远不会起作用,因为ref必须在声明时初始化,如果它是一个const,但在同一个动作中我不能保持对unique_ptr的引用,除非它是一个const unique_ptr&type如果我没有弄错的话.我最终做的是:

Object* ref = nullptr;
for(auto& s : stuff) {
    if(condition) {
         ref = s.get();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个正确的解决方案还是我应该考虑使用shared_ptr来完成这项工作?

c++ gcc c++11

3
推荐指数
2
解决办法
353
查看次数

在CMAKE中链接到ExternalProject_add依赖项

运行忍者时,我在下面收到此忍者构建错误。我的CMAKE构建命令是cmake -G"Ninja" -DCMAKE_BUILD_TYPE=Release

ninja: error: 'ext_deps/api/src/ext_api/build/src/lib/libapi.a', needed by 'Project', missing and no known rule to make it
Run Code Online (Sandbox Code Playgroud)

假设我的项目由一个API(通过CMAKE从GitHub下载)和实现(该项目)组成。

The layout would look like:
Project/
-- build/
-- cmake/modules
----- ExternalDep.cmake
----- FindAPI.cmake
-- CMakeLists.txt
-- src/
---- CMakeLists.txt
-- include/
Run Code Online (Sandbox Code Playgroud)

假设在顶层,CMakeLists.txt我通常执行设置构建设置,CXX标志等的工作,然后调用include(ExternalDep),它检查“ API”库是否在用户系统中(如果不是,则通过CMAKE下载) )。在src/CMakeLists.txt我尝试使用

target_link_libraries(${PROJECT_NAME} PRIVATE ${API_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

我遇到的第一个问题是,在甚至可以下载和构建“ API”库之前,我会收到上面发布的忍者构建错误。我很肯定在ExternalDep.cmake尝试添加Project可执行文件并针对“ API”库进行链接之前已将其包含在内。

这是的简化版本ExternalDep.cmake

  set(EXT_DEPS_PREFIX "ext_deps")

  ExternalProject_Add(ext_lib
    GIT_REPOSITORY "https://github.com/fake/api.git"
    GIT_TAG "master"
    PREFIX "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api"
    TMP_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api-tmp"
    STAMP_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api-stamp"
    CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
    SOURCE_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api/ext_api"
    BINARY_DIR …
Run Code Online (Sandbox Code Playgroud)

c++ cmake ninja

2
推荐指数
2
解决办法
2042
查看次数

Android Studio文件类型扩展名定义

我在Android Studio中创建了一个新文件(扩展名为.frag),弹出了一个"注册新文件类型关联"窗口.我没有注意,我选择了"在相关应用程序中打开匹配文件",现在这样做,所以当我尝试打开它在Gedit中打开的*.frag文件时(我在文件创建时打开) .我检查了设置中的文件类型,但我没有看到更改关联定义的选项.我希望我的*.frag文件在Android Studio中打开.

android-studio

1
推荐指数
1
解决办法
2142
查看次数

标签 统计

c++ ×2

android-studio ×1

c++11 ×1

cmake ×1

gcc ×1

ninja ×1