AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-21804960

SpeakX's questions

Martin Hope
SpeakX
Asked: 2024-08-23 22:09:42 +0800 CST

std::ranges::any_of Detalhes de implementação do pedido

  • 9

Estou olhando cppreference mas não vejo nenhuma informação sobre a ordem do loop executado.

Minha pergunta : ao ligar, std::ranges::any_oftenho data.begin(), data.end() certeza de que vai de begin()para end()em ordem e para uma vez true?

c++
  • 2 respostas
  • 63 Views
Martin Hope
SpeakX
Asked: 2024-08-16 02:45:00 +0800 CST

Por que std::make_format_args espera uma referência não const

  • 6

Olhando a documentação , não entendo por que std::make_format_args()pega uma referência e não uma referência const?

Meu objetivo é implementar algo como:

#include <format>

template <class... Args>
inline static std::string format(const std::string_view field, Args&&... args)
{ 
    return std::vformat(field, std::make_format_args(std::forward<Args>(args)...)); 
}

E poder passar const std::string&como entrada args, mas parece que std::make_format_args()espera uma referência não const.

Eu recebo um erro:

A non-const reference may only be bound to an lvalue C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\include\format(3713): note: see declaration of 'std::make_format_args'
note: while trying to match the argument list '(_Ty, const std::string, _Ty, _Ty)'

ATUALIZAR

Posso reproduzir o erro aqui: https://godbolt.org/z/nj763o48r (localmente recebo exatamente o mesmo erro acima)

c++
  • 1 respostas
  • 50 Views
Martin Hope
SpeakX
Asked: 2024-07-27 09:42:06 +0800 CST

Variável thread_local aninhada [duplicada]

  • 4
Esta pergunta já tem respostas aqui :
Existe algum benefício em usar static para a variável thread_local? (2 respostas)
As variáveis ​​​​thread_local do C++ 11 são automaticamente estáticas? (4 respostas)
Fechado ontem .

Ao declarar static thread_localuma variável, cada thread possui uma cópia dessa variável. Imagine que um thread gira outro thread. Essa variável ainda será uma cópia no thread aninhado?

c++
  • 1 respostas
  • 40 Views
Martin Hope
SpeakX
Asked: 2024-03-02 08:14:13 +0800 CST

Mapeando tupla elemento a elemento usando função de modelo

  • 8

Estou usando perform_mappingfrom link como aqui link , mas recebo um erro de compilação.

#include <string>
#include <tuple>
#include <utility>
#include <string>
#include <type_traits>

namespace details
{
    template <typename Tuple, typename Mapping>
    struct return_type;
    
    template <template <typename ...> typename Tuple, typename ... Types, typename Mapping>
    struct return_type<Tuple<Types...>, Mapping>
    {
        //I changed the below line from what is in the link
        using type = Tuple<decltype(std::invoke_result<Mapping, Types>())...>;
    };
    template <template <typename, std::size_t> typename Array, typename T, std::size_t Size, typename Mapping>
    struct return_type<Array<T, Size>, Mapping>
    {
        using type = Array<std::invoke_result_t<Mapping, T>, Size>;
    };
    
    template <typename Tuple, typename Mapping>
    using return_type_t = typename return_type<Tuple, Mapping>::type;
    
    template <typename Tuple, typename Mapping, std::size_t ... Indices>
    return_type_t<std::decay_t<Tuple>, std::decay_t<Mapping>> perform_mapping(Tuple&& tup, Mapping&& mapping, std::index_sequence<Indices...>)
    {
        return {mapping(std::get<Indices>(std::forward<Tuple>(tup)))...};
    }
}

template <typename Tuple, typename Mapping, 
          std::size_t Size = std::tuple_size<std::decay_t<Tuple>>::value>
auto perform_mapping(Tuple&& tup, Mapping&& mapping)
{
    return details::perform_mapping(std::forward<Tuple>(tup), std::forward<Mapping>(mapping), std::make_index_sequence<Size>{});
}

struct A
{
    A(double z) : x(z){}; 
    double x;
    using Type = double;
};

struct B
{
    B(std::string s) : x(std::move(s)) {}
    std::string x;
    using Type = std::string;
};

struct C
{
    C() : m_tuple({A(1.0), B("A")})
    {
    }

    template<class T>
    typename T::Type f(T& z)
    {
        return z.x;
    }

    std::tuple<A::Type, B::Type> get()
    {
        return perform_mapping(m_tuple, [this](auto& z) { return this->f(z); });
    }

    std::tuple<A, B> m_tuple;
};

int main()
{
    C c;
    auto t = c.get();
};

Minha dúvida é: Posso implementar perform_mappingde forma que o código acima funcione?

c++
  • 1 respostas
  • 45 Views
Martin Hope
SpeakX
Asked: 2024-02-26 06:56:30 +0800 CST

Inicialização de chave da estrutura filho

  • 4

Existe uma maneira de inicializar uma estrutura filho usando chaves, incluindo variáveis ​​de membro da estrutura base. Estou tentando o abaixo, mas não compila (usando VS e C++ 20). Não quero criar um construtor e gostaria de usar uma construção de uma linha .

struct Base
{
    int n;
};

struct Derived : Base
{
    std::string s;
};

static const Derived d1{ .s = "Hi", { .n = 1 } }; //fails to compile
static const Derived d2{ 1, { "Hi" } };           //fails to compile
static const Derived d3{ 1, "Hi" };               //fails to compile
static const Derived d4(1, "Hi");                 //fails to compile

EDIT : d4, d3na verdade, compile bem.

c++
  • 1 respostas
  • 45 Views
Martin Hope
SpeakX
Asked: 2024-01-22 20:23:25 +0800 CST

Atualizar se não expirou no ponteiro fraco no contexto multithread

  • 4

O cliente mantém um ponteiro compartilhado para um valor, digamos double, e um servidor atualiza esse valor em outro thread desanexado, mantendo um weak_pointer, o servidor verifica se weak_pointerexpirou e, se não estiver, é excluído de um vetor seguro. Suspeito que isso não funcionaria, pois poderia shared_ptrser destruído do lado do cliente entre minha leitura expired()(que considero thread-safe, pois imagino que se refere ao contador atômico de shared_ptr) e minha atualização do valor. Existe uma maneira de fazer com que a verificação expired()e uma lambdafunção atualizem o valor antes que ele seja destruído, por favor? Quero dizer:

struct server
{
public:
    static void subscribe(const std::shared_ptr<double>& d)
    {
        m_values.safe_push_back(d); //safely pushes back in the vector
    }

    void update()
    {
        auto updater = [](std::weak_ptr<double>& wd)
        {
            if(wd.expired()) wd = nullptr;
            else *wd += 2.0; //This is not thread safe I guess?
        };
        m_values.safe_remove_all(nullptr);
        m_values.safe_visit(updater);
    };

private:
    static safe_vector<std::weak_ptr<double>> m_values;
}
struct client
{
    void subcribe_sleep_print(const double random_seconds)
    {
        std::shared_ptr<double> d = std::make_shared<double>(0.0); //for the sake of the example assume we create subscribe before sleep
        server::subscribe(d);
        sleep_for_seconds(random_seconds); //sleeps for some random time in seconds.
        std::cout << *d << std::endl;
    }
}

Imagine server::updatee client::subcribe_sleep_printesteja rodando em threads diferentes. Isso não é seguro, pois shared_ptrpode ser destruído enquanto o servidor está gravando? Existe uma maneira de fazer isso sem atômicos ou mutexes definidos pelo usuário (eu)? Não me importo se for usado em segundo plano, desde que eu mesmo não os adicione (atômico/mutex), pois sei que o ponteiro compartilhado já usa um contador atômico.

EDIT : Não estou usando double no meu programa, estou usando um objeto thread-safe :) Portanto, a operação += pode ser assumida como thread-safe. Desculpe.

c++
  • 1 respostas
  • 64 Views
Martin Hope
SpeakX
Asked: 2024-01-10 06:02:40 +0800 CST

Ponteiro compartilhado com contagem máxima de uso predefinida

  • 8

Contexto : Eu tenho uma fila que suporta leitura única/gravação única de dois threads diferentes (/ou não), para impor esse comportamento, ou seja, leitor único/gravador único por vez, preciso limitar o número de threads proprietários a fila por vez para 2 (o escritor já possui a fila), eu estava pensando em criar um shared_ptr para a fila com uma contagem máxima de referências conhecida em tempo de compilação definida como 2. Portanto, minha pergunta é a seguinte.

Pergunta : Existe uma maneira de implementar um ponteiro compartilhado (talvez usando unique_pointer's) com uma contagem máxima de referências conhecida em tempo de compilação? Meu caso é, max_ref_count = 2ou seja, exceder o limite de contagem de referências = 2 deve ser um erro em tempo de compilação.

const auto p    = std::make_shared<2, double>(2159); //works fine
const auto q    = p; // works fine
const auto err1 = p; // does not compile
const auto err2 = q; // does not compile
c++
  • 2 respostas
  • 112 Views
Martin Hope
SpeakX
Asked: 2024-01-03 01:25:09 +0800 CST

construindo tupla de tipos de classes a partir de tipos de argumentos de modelo

  • 6

Gostaria de construir um tipo que seja uma tupla da mesma classe com diferentes tipos de argumentos de modelo. Quero dizer:

Imagine que temos uma aula

template<class Arg>
class A
{
    //.... details
}

Quero definir algo como:

template<class... Args>
struct construct_tuple 
{
    //assume I can access Args[...]
    using type = std::tuple<A<Args[0]>, A<Args[1]>, ..., A<Args[n]>>;
}

Poderia ajudar por favor?

Acredito que pode haver uma solução iterando os argumentos variados e usando a conexão entre tipos de tuplas ou talvez usando algum outro TMP, por exemplo, std::enable_ifou std::conditional_t.

c++
  • 2 respostas
  • 51 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve