🦀 Транспиляция кода: от одного языка к другому
Представьте ситуацию: вы нашли идеальное решение на GitHub, но оно написано не на том языке. Или ваш руководитель прочитал статью о новом фреймворке, и теперь нужно переписывать всю кодовую базу. Знакомо?
Хорошая новость: современные LLM-модели отлично справляются с транспиляцией кода между языками программирования.
✏️ Промпт
🍴 Пример использования
Результат:
Библиотека C/C++ разработчика
#буст
Представьте ситуацию: вы нашли идеальное решение на GitHub, но оно написано не на том языке. Или ваш руководитель прочитал статью о новом фреймворке, и теперь нужно переписывать всю кодовую базу. Знакомо?
Хорошая новость: современные LLM-модели отлично справляются с транспиляцией кода между языками программирования.
Rewrite the following code in C++:
[Вставь свой код сюда]
# Исходный Python код
def count_words(text):
"""Count word frequency in text"""
words = text.lower().split()
freq = {}
for word in words:
freq[word] = freq.get(word, 0) + 1
return freq
# Пример использования
text = "hello world hello python world"
print(count_words(text))
# Output: {'hello': 2, 'world': 2, 'python': 1}
Результат:
#include <iostream>
#include <string>
#include <map>
#include <sstream>
#include <algorithm>
std::map<std::string, int> count_words(const std::string& text) {
std::map<std::string, int> freq;
std::istringstream stream(text);
std::string word;
while (stream >> word) {
// Convert to lowercase
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
freq[word]++;
}
return freq;
}
int main() {
std::string text = "hello world hello python world";
auto result = count_words(text);
for (const auto& [word, count] : result) {
std::cout << word << ": " << count << std::endl;
}
return 0;
}
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9👾1
Чтобы один поток ожидал другого можно воспользоваться condition_variable.
#include <condition_variable>
#include <mutex>
#include <thread>
#include <iostream>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; }); // Ждём сигнала
std::cout << "Worker started!\n";
}
int main() {
std::thread t(worker);
std::this_thread::sleep_for(std::chrono::seconds(1));
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one(); // Будим поток
t.join();
return 0;
}
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🙏1
Запуск нового C++ проекта часто начинается с рутины: создание классов с конструкторами, деструкторами, операторами копирования/перемещения, шаблоны паттернов... Звучит очень знакомо и ужасно скучно. Что хотябы немного облегчить себе задачу можно воспользоваться AI.
Хотя AI и не знает бизнес-логику проекта, но зато он отлично справляется с созданием базовой структуры проекта.
Промпт:
Создай boilerplate код для C++ класса ResourceManager,
который управляет игровыми ресурсами (текстуры, звуки).
Класс должен быть синглтоном,
шаблонными методами загрузки/получения ресурсов и
thread-safe доступом.
Результат:
#pragma once
#include <memory>
#include <unordered_map>
#include <mutex>
#include <string>
template<typename T>
class ResourceManager {
private:
std::unordered_map<std::string, std::shared_ptr<T>> resources;
mutable std::mutex mutex;
// Приватный конструктор для синглтона
ResourceManager() = default;
public:
// Удаляем конструктор копирования и оператор присваивания
ResourceManager(const ResourceManager&) = delete;
ResourceManager& operator=(const ResourceManager&) = delete;
// Конструктор и оператор перемещения
ResourceManager(ResourceManager&&) noexcept = default;
ResourceManager& operator=(ResourceManager&&) noexcept = default;
// Деструктор
~ResourceManager() = default;
// Получение единственного экземпляра (Meyer's Singleton)
static ResourceManager& getInstance() {
static ResourceManager instance;
return instance;
}
// Загрузка ресурса
template<typename... Args>
bool load(const std::string& id, Args&&... args) {
std::lock_guard<std::mutex> lock(mutex);
if (resources.find(id) != resources.end()) {
return false; // Уже загружен
}
auto resource = std::make_shared<T>(std::forward<Args>(args)...);
resources[id] = resource;
return true;
}
// Получение ресурса
std::shared_ptr<T> get(const std::string& id) const {
std::lock_guard<std::mutex> lock(mutex);
auto it = resources.find(id);
return (it != resources.end()) ? it->second : nullptr;
}
// Выгрузка ресурса
bool unload(const std::string& id) {
std::lock_guard<std::mutex> lock(mutex);
return resources.erase(id) > 0;
}
// Очистка всех ресурсов
void clear() {
std::lock_guard<std::mutex> lock(mutex);
resources.clear();
}
};
• Полностью рабочий шаблонный класс
• Thread-safe операции
Теперь можешь сразу добавлять свою бизнес-логику, вместо того чтобы тратить время на шаблонный код
Библиотека C/C++ разработчика
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱8👍3❤1