Имеется табличка со столбцом isArchive и по умолчанию в нем False. Можно ли сделать так (для одного и того же пользователя), чтобы после установки значения True в столбце isArchive строку нельзя было исправить (заапдейтить)? Как это сделать, если можно?
Для этого приходится писать мэппер ... , который можно сделать со switch или std::map взять, или еще что-то. Но как-то написание мэппера не красиво выглядит, т.к. константы одни и те же. Можно как-то эти константы из enum class SomeWorkingStatus запихнуть в протобуферные перечисления без написания всяких преобразователей (мэпперов)?
Не могу понять, почему пакетный менеджер на виртуалке, почти с нуля, делает то статическаю, то динамическую библиотеку ))) Как добится установки статической либы?
$ ./vcpkg install jsoncpp
Computing installation plan...
The following packages are already installed:
jsoncpp[core]:x64-linux
Package jsoncpp:x64-linux is already installed
Total elapsed time: 60.66 us
The package jsoncpp:x64-linux provides CMake targets:
find_package(jsoncpp CONFIG REQUIRED)
target_link_libraries(main PRIVATE jsoncpp_lib)
нужно, так, но не знаю как это стабильно получать
./vcpkg install jsoncpp
Computing installation plan...
The following packages are already installed:
jsoncpp[core]:x64-linux -> 1.9.4
Package jsoncpp:x64-linux is already installed
Total elapsed time: 123.8 us
The package jsoncpp:x64-linux provides CMake targets:
find_package(jsoncpp CONFIG REQUIRED)
target_link_libraries(main PRIVATE jsoncpp_object jsoncpp_static)
Имеется протобуфное сообщение (message) X, представляющее собой повторяющееся (repeated) поле другого протобуфного сообщения A. В вектор vectorX типа std::vector<X> из БД был зачитанн массив сообщений X. Во время создания и отправки сообщения А вектор vectorX доступен и существует в программе.
Как наиболее эффективно переместить элементы вектора vectorX (или переставить ссылки на элементы вектора vectorX) в сообщение А.
Собственно работает, но что-то мне кажется это не самое эффективное решение
for(auto iter = vectorX.begin(); iter != vectorX.end(); ++iter) {
X *x = A.add_x();
*x = *iter;
}
Частенько, в примерах на C++, приватные члены класса начинаются префиксом m или m_. Понятно, что это удобно при использовании IDE, например, на предпросмотре увидеть приватные члены класса …
Но, как расшифровывается это m? Или просто взяли букву с потолка (private, hidden, invisible … ничего не подходит)?
Привет всем, Помогите с выбором архитектуры. Использовать исключения или нет, какие есть аргументы за 1 решиение и за 2-е. Скажеться ли использование исключений на производительности?
Решение 1, с пробросом и обработкой исключений. Кажется код проще поддерживать, при этом:
class A {
public:
std::mutex statusMutex;
int status;
std::string error;
int getStatus() {
std::unique_lock<std::mutex> lock(statusMutex);
return status;
}
std::string getError() {
std::unique_lock<std::mutex> lock(statusMutex);
return error;
}
bool doX() {
try {
step1();
// step2();
// step3(); ...
return true;
} catch (const std::exception & e) {
std::unique_lock<std::mutex> lock(statusMutex);
status = -1;
error = e.what();
return false;
}
}
void step1(){
// ...
// There has been a breakdown
throw std::runtime_error ("step1 err");
}
};
решение 2, без исключений, в плане работы на кодом кажеться не очень удобным из-за if
class A {
public:
std::mutex statusMutex;
int status;
std::string error;
int getStatus() {
std::unique_lock<std::mutex> lock(statusMutex);
return status;
}
std::string getError() {
std::unique_lock<std::mutex> lock(statusMutex);
return error;
}
bool doX() {
step1();
if (status == -1) return false;
// step2();
// if (status == -1) return false;
// step3();
// if (status == -1) return false;
// ...
return true;
}
void step1(){
// ...
// There has been a breakdown
std::unique_lock<std::mutex> lock(statusMutex);
status = -1;
error = "step1 err";
}
};
Решил поюзать диспечер пакетов vcpkg и установил в нем opencv (vcpkg install grpc). При этом консольные проекты, выполняющие просто обработку изображений нормально собираются и запускаются.
При попытке запустить приложение с «окошком» (визуальное отображение рисунка imshow) возникает ошибка:
OpenCV(4.3.0) Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvWaitKey, file /home/cvprog/vcpkg/buildtrees/opencv4/src/4.3.0-0c6047baf6.clean/modules/highgui/src/window.cpp, line 717
Предполажил, что в vcpkg нужно поставить gtk:
./vcpkg update
./vcpkg install gtk
...
CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:85 (message):
Command failed: autoreconf -v --install
Working Directory: /home/cvprog/vcpkg/buildtrees/libepoxy/src/1.5.4-337c486045.clean
Error code: 1
...
Error: Building package libepoxy:x64-linux failed with: BUILD_FAILED
$ cat /home/cvprog/vcpkg/buildtrees/libepoxy/autoreconf-x64-linux-err.log
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal -I m4
configure.ac:36: error: must install xorg-macros 1.8 or later before running autoconf/autogen.
Hint: either install from source, git://anongit.freedesktop.org/xorg/util/macros or,
depending on you distribution, try package 'xutils-dev' or 'xorg-x11-util-macros'
configure.ac:36: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: error: echo failed with exit status: 1
autoreconf: aclocal failed with exit status: 1
cmake ..
CMake Error: The source directory "C:/Users/user" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
C:\Users\user\test>
C:\Users\user\test>
C:\Users\user\test>
C:\Users\user\test>
C:\Users\user\test>cmake .
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19041.
-- The C compiler identification is MSVC 19.27.29111.0
-- The CXX compiler identification is MSVC 19.27.29111.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: C:/Users/user/openccv3_build/bbb (found version "3.4.11") found components: opencv_core
OpenCV_INCLUDE_DIRS = C:/Users/user/openccv3_build/bbbC:/Users/user/openccv3_build/opencv-3.4.11/includeC:/Users/user/openccv3_build/opencv-3.4.11/include/opencvC:/Users/user/openccv3_build/opencv-3.4.11/modules/core/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/flann/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/imgproc/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/ml/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/photo/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/video/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/dnn/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/features2d/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/imgcodecs/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/shape/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/videoio/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/calib3d/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/highgui/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/objdetect/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/stitching/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/superres/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/ts/includeC:/Users/user/openccv3_build/opencv-3.4.11/modules/videostab/includeC:/Users/user/openccv3_build/opencv_contrib-3.4.11/modules/bioinspired/includeOpenCV_LIBS = opencv_core
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/user/test
Ну и проблема
C:\Users\user\test>cmake --build .
Microsoft (R) Build Engine version 16.7.0+b89cb5fde for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Checking Build System
Building Custom Rule C:/Users/user/test/CMakeLists.txt
main.cpp
main.obj : error LNK2019: unresolved external symbol "private: void __cdecl cv::String::deallocate(void)" (?dealloc
ate@String@cv@@AEAAXXZ) referenced in function "public: __cdecl cv::String::~String(void)" (??1String@cv@@QEAA@XZ)
[C:\Users\user\test\cvtest.vcxproj]
C:\Users\user\test\Debug\cvtest.exe : fatal error LNK1120: 1 unresolved externals [C:\Users\user\test\cvtes
t.vcxproj]