set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt5 5.11 COMPONENTS Widgets REQUIRED) # или Qt6
add_excecutable(my_app PRIVATE main.cpp)
target_link_libraries(my_app PRIVATE Qt5::Widgets) # или Qt6
#set(CMAKE_CXX_COMPILER "C:/Program Files/JetBrains/CLion 2021.3.3/bin/mingw/bin/g++.exe")
for (int row = 0; row < 400; row++) {
for (uint8_t partA = 0; partA < 256; partA ++) {
for (uint8_t partB = 0; partB < 4; partB ++) {
arr->append (partA);
arr->append (partB);
}
}
}
A
и, если есть, удалите их из потомков. Если программа перестала компилироваться - в этом месте была ошибка из-за срезки. Если копирование в этом месте всё же нужно - создайте виртуальный метод copy
в класса A
и определите в потомках. __attribute__((always_inline))
, который гарантирует встраивание. Но его не рекомендуют использовать, т.к. на практике это только усложняет разработку, но не приводит к заметному повышению производительности - у компилятора лучше получается определять, когда необходимо встраивание. В VC вроде бы тоже есть подобный атрибут. int start_client (std::string host, std::string port){
using boost::asio::ip::tcp;
namespace asio = boost::asio;
asio::io_service io_service;
try
{
std::vector<char> data_request(max_length, ' ');
std::vector<char> data_reply(max_length, ' ');
tcp::socket s(io_service);
tcp::resolver resolver(io_service);
boost::asio::connect(s, resolver.resolve({host, port}));
// далее передача данных
} сatch (std::exception& e){
std::cerr << "Exception: " << e.what() << "\n";
return -1;
}
return 0;
}
~ModuleClass() = default;
как раз и означает, что он не определяется вручную. default не определяет деструктор, в данном случае он носит роль комментария, с тем же успехом я мог написать //~ModuleClass() - деструктор по умолчанию
.
Ну или вручную написать парсер при помощи std::from_chars и std::string_view (методы starts_with, find_first_of, remove_prefix и т.п.)