我试图在我的函数中避免输出参数.旧功能是:
void getAllBlockMeanError(
const vector<int> &vec, vector<int> &fact, vector<int> &mean, vector<int> &err)
Run Code Online (Sandbox Code Playgroud)
这里vec是输入参数,fact,mean和err输出参数.我试图将输出参数分组为一个元组:
tuple< vector<int>, vector<int>, vector<int> >
getAllBlockMeanErrorTuple(const vector<int> &vec)
{
vector<int> fact, mean, err;
//....
return make_tuple(fact, mean, err);
}
Run Code Online (Sandbox Code Playgroud)
现在我可以调用新函数:
tie(fact, mean, err) = getAllBlockMeanErrorTuple(vec);
Run Code Online (Sandbox Code Playgroud)
它对我来说看起来更干净.虽然我有一个问题,如何平等分配tie(fact, mean, err)工作?它是做深拷贝还是移动?因为fact,mean和err内getAllBlockMeanErrorTuple就会被破坏,我希望它做的举动,而不是深拷贝.
我已经在我的笔记本电脑上正确安装了 lapack 和 blas,我可以通过使用链接
-L/usr/lib64 -lblas -llapack
Run Code Online (Sandbox Code Playgroud)
在我的 Makefile 中。
我想使用 cmake 创建一个 Makefile 并链接 lapack 和 blas,我在 /usr/share/cmake/Modules/ 中使用 cmake 提供的 FindLAPACK.cmake 和 FindBLAS.cmake
CMakeLists.txt 是使用:
find_package(BLAS)
find_package(LAPACK)
if(LAPACK_FOUND AND BLAS_FOUND)
set(lapackblas_libraries "${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}")
endif()
target_link_libraries(code_exe ${lapackblas_libraries})
Run Code Online (Sandbox Code Playgroud)
这code_exe是我链接 lapack 和 blas 库的可执行文件,出现错误
make[2]: *** No rule to make target `/usr/lib64/libblas.so /usr/lib64/liblapack.so', needed by `test/tensortest'. Stop.
make[1]: *** [test/CMakeFiles/tensortest.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我吗?非常感谢。