Например, есть шаблонный класс, например
template<int nd>
class foo_t{
...
};
class foo_holder : public std::variant<foo_t<1>, foo_t<2>>{
...
template<int nd>
operator foo_t<nd>& () const {
return std::get<foo_t<nd>>(*this);
}
};
И, например, есть шаблонная функция, принимающая этот шаблонный класс и в то же время параметризуемая ещё какими-то параметрами
template<int nd, int flag>
void proc_foo_f(foo_t<nd>&)
void proc_foo(foo_holder& foo, int a, int b){
int nd=foo.index()+1
switch (nd) {
case 1: switch (flag) {
case FLAG1: return proc_foo_f<1,1>(foo);
case FLAG2: return proc_foo_f<1,2>(foo);
...
}
case 2: switch (flag) {
case FLAG1: return proc_foo_f<2,1>(foo);
case FLAG2: return proc_foo_f<2,2>(foo);
...
}
}
}
Думал сделать это ввиде виртуального класса-функтора, но как-то это тоже коряво, тем более для каждого инстанса его надо не только писать, но ещё и называть как-то. Как такую семантику делать правильно?
Нужно передать сообщение полученое по одному протоколу в виде похожего сообщения по другому протоколу.
один протокол, пусть p1
message A { X x; ...}
message B {X x; ...}
Пытаюсь заполнить сообщение для передачи вот так, через строку
p1:A a1 = someProcedure();
p2::X *x2 = new p2::X();
std::string tmp;
a.x().SerializeToString(&tmp);
x2->ParseFromString(tmp);
a1->set_allocated_x(x2); // a1 типа p1:A
Все работает конечно. Но, блин, чем то напрягает это решение ... как то коряво )
P.S. я правильно понимаю, что утечки тут нет (x2 = new), т.к. протобуф сам освободит память?
Хочу сделать p2p чатик без использования сервера, в интернете много общей информации по одноранговым сетям, но подробностей не так много. Где можно подробно про это почитать? На данный момент больше всего интересует как можно узнать адрес хотя бы одного клиента находящегося в сети. Например когда клиент подключаться к сети ему же нужно связаться хотя бы одного другого клиента. Получается в любом случае должен быть хотя бы какой то известный изначально узел, который может передать такую информацию. Возможно существуют какие то сервисы, которые по REST API например, могут предоставить информацию о других клиентах в сети. Не хотелось бы делать велосипед, если есть готовые варианты с которыми можно потренироваться работать.
сетевые раскопки привели к интересному :
http://home.mweb.co.za/sd/sdonovan/underc.html
старинный интерпретатор (!!) С++. С эксепшинами и stl
Кому писать дипломы и прочие курсовые - срочно брать и апгрейдить до современного окружения. А то развелось понимаешь питонятины :-)
Интересно узнать. А то я как дебил проспал все лекции по Си, теперь вот кресты учу по ютубу. Си не нравится (там в принтф надо %d пихать когда цифру выводишь :)) А вообще с чего лучше учить начинать? Уровень примерно: калькуль могу накидать, логические операции, мб еще чего могу, не пробовал пока все, матрицу транспонировать изи. короче уровень ниже начальной школы
По книжкам лучше или как?
В ютубе курсы понятные, но в стиле " здесь мы ставим иф, в скобочках условие, открываем фигурную, пишем код, который будет выполняться если условие выполнено, потом закрываем"
День добрый.
Написал бота на C++, работающего через webhook.
Написал две версии, работающие через:
Обе версии испытывают одну и ту же проблему: данные приходят только после разрыва соединения с противоположного конца (когда у сервера Telegram проходит таймаут ожидания ответа). Т.е. у меня вызываются функции recv()
или SSL_read()
соответственно, которые:
setsockopt(newsock, SOL_SOCKET, SO_RCVTIMEO, ...)
Интересно то, что эта проблема только с серверами Telegram: по крайней мере, если я выполняю запрос curl -X POST -d 'тут json' -k https://MYBOTURL
со своего компа к боту (бот на VPS), то всё выполняется успешно.
Может кто знает, с чем это может быть связано…
Нужно из случайного индекса вектора брать данные и копировать во второй вектор. Соостветственно нужны случайные итераторы которые не будут повторятся. Ничего кроме как городить проверяющий цикл с условием – не придумаю. Есть ли решения с использованием STL и <random>
?
Казалось бы элементарная проблема, но завис на ней.
В python есть крайне полезные функции zip, enumerate, range. Мне нужно что-то подобное для cpp/cuda (c++17). Если c range и enumerate более менее понятно, то как реализовать zip не соображу. Семантически это должно быть variadic template
template<typename t, typename... ts>
class zip : zip<ts...>{
zip(t arg, ts... args);
struct iterator;
begin() -> iterator;
end() -> iterator;
};
for(auto [x,y,z] : zip(xs,ys,zs))
using ret_type = tuple<decltype(begin(declval<t>())), decltype(???)>
$cast AntonI, может у вас кто такое делал?
Узнал ужасную вещь. С++ удаляет локальные переменные.
Допустим создал я объект
Myclass xxx;
xxx.onready = func
xxx.start();
Привет ЛОРчане!
Захотелось мне поуправлять своей ардуиной через одно известное облако.
У них даже есть свой типа SDK.
Проблема в том, что писали его в торопях и:
реализовали только ограниченный функционал RPC, прчем так, что с виджета knot, например, не получится поуправлять девайсом т.к. колбэк может возвращать только пары ключ-значение, но не может вернут real, например.
не реализовали подписку на атрибуты. Совсем.
Первый косяк я уже пофиксил, правда пришлось сломать совместимость с исходным api (нехорошо, но по другому было нельзя).
Сейчас думаю, как пофиксить второй косяк, но, т.к. я трогаю С++ второй раз в жизни, то есть определенные трудности понимания. В этой связи вопрос к плюсовикам: что значат вот эта строка и следующая?
По итогу обещаю выложить пофикшенную версию и сделать пулл-реквест. Doen! Спасибо fsb4000!
Я тут изучаю с++ ) Не могу понять как мне проверить что объект создан?
Process{
public:
Process(const char* cmd_){}
...
}
Process ffplay=NULL;
if(ffplay){} //ошибка
//conditional expression of type 'Process' is illegal
if(ffplay != NULL && !ffplay.isClosed()){} //ошибка
//binary '!=': no operator found which takes a left-hand operand of type 'Process' (or there is no acceptable conversion)
Понятно что речь идет о случае когда отвечающие итераторам элементы не были удалены.
std::map<T1, T2> M;
... тут мы что то в M напихали ...
I = M.find(k); // что то нашли
... тут мы вовсю добавляем/удаляем элементы в M, но элемент с ключем k НЕ удаляем
>>>> вот тут I рабочий? <<<
Делаю программу на libavcodec, она цепляет avcodec.dll и прочие. Я хочу один бинарь, так как не удобно таскать dll всюду. Можно ли такое? Или нужно добавлять в проект весь исходный код ffmpeg и сомпилировать?
Добрый день.
Версия Qt с данным багом: Qt5.15.1.
Версия Qt без данного бага: Qt5.12.9.
Повторно описывать подробно не буду, если что милости прошу на страницу бага (https://bugreports.qt.io/browse/QTBUG-88125).
Если у нас есть некий производный от QObject
(или другого в его иерархии) с макросом Q_OBJECT
и если в данном заголовочном файле есть подключение <bsoncxx/types.hpp>
(напрямую или косвенно) то будет ошибка компиляции метаобъектным компилятором Qt (MOC).
Проблема заключается в следующих строках файла <bsoncxx/types.hpp>
:
enum class type : std::uint8_t {
#define BSONCXX_ENUM(name, val) k_##name = val,
#include <bsoncxx/enums/type.hpp>
#undef BSONCXX_ENUM
};
И вот содержимое <bsoncxx/enums/type.hpp>
:
#ifndef BSONCXX_ENUM
#error "This header is only meant to be included as an X-macro over BSONCXX_ENUM"
#endif
BSONCXX_ENUM(double, 0x01)
BSONCXX_ENUM(utf8, 0x02)
BSONCXX_ENUM(document, 0x03)
BSONCXX_ENUM(array, 0x04)
BSONCXX_ENUM(binary, 0x05)
BSONCXX_ENUM(undefined, 0x06)
BSONCXX_ENUM(oid, 0x07)
BSONCXX_ENUM(bool, 0x08)
BSONCXX_ENUM(date, 0x09)
BSONCXX_ENUM(null, 0x0A)
BSONCXX_ENUM(regex, 0x0B)
BSONCXX_ENUM(dbpointer, 0x0C)
BSONCXX_ENUM(code, 0x0D)
BSONCXX_ENUM(symbol, 0x0E)
BSONCXX_ENUM(codewscope, 0x0F)
BSONCXX_ENUM(int32, 0x10)
BSONCXX_ENUM(timestamp, 0x11)
BSONCXX_ENUM(int64, 0x12)
BSONCXX_ENUM(decimal128, 0x13)
BSONCXX_ENUM(maxkey, 0x7F)
BSONCXX_ENUM(minkey, 0xFF)
Все директивы #include
для подключения заголовочных файлов библиотеки bsoncxx/mongocxx
оборачивать в блоки с применением макроса Q_MOC_RUN
:
#ifndef Q_MOC_RUN
// start to include the bsoncxx/mongocxx library header files
#include <bsoncxx/types.hpp>
#include <bsoncxx/array/value.hpp>
#include <bsoncxx/array/view.hpp>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/document/value.hpp>
#include <bsoncxx/document/view.hpp>
// etc
#endif
Спасибо aol
auto main () -> int {
return 0;
}
Привет всем, Помогите с выбором архитектуры. Использовать исключения или нет, какие есть аргументы за 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";
}
};
int main() {
A a;
std::future<bool> the_a_result = std::async(&A::doX, &a);
std::cout << "the_a_result = " << the_a_result.get()
<< ", a.status = " << a.getStatus()
<< ", a.error = '" << a.getError() << "'"
<< std::endl;
return 0;
}
Всем здравствуйте.
Собственно, вопрос.
Я пока что могу назвать лишь 3 инструмента, умеющих указанное:
c_cpp_properties.json
, очень криво).Кто ещё?
Может быть, есть какие-л. модули расширения для Anjuta, QtCreator, Code::Blocks, KDevelop, Atom, или CodeLite?
Добрый день. Вот, допустим есть некий класс, обычный, с методами, свойствами и т.д. (описывает параметры неких электронных компонентов, не суть). В том числе должна быть некая функция, специфичная для экземпляра класса, принимающая некоторое различное число параметров и возвращающая double.
Как я понимаю, стандартным методом является указатели на функции, описанную где-то ещё, и специфичные для членов класса, передающиеся через конструктор/сеттер и т.д.
А не придумали ли в C++11 или что там сейчас поддерживает gcc, что-нибудь типа лямбд для определения функции прямо при создании экземпляра класса?
Зашифровал скриншот рабочего стола фейстелем записал в tga, а обратно не получается, хотя обычный текстовый документ туда-обратно вроде без ошибок, куда капать? Вот скриншот до кучи https://dropmefiles.com/a1UlA
вперед → |