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 / coding / 问题

All perguntas(coding)

Martin Hope
La Creatura
Asked: 2025-04-06 00:08:21 +0800 CST

Regras sobre a escolha do tipo para um literal cujo valor é muito grande

  • 9

Eu estava testando o comportamento dos três grandes (GCC, clang, MSVC). Não tenho certeza do que é compatível com o padrão.

Considere este código:

// p43.cxx
#include <type_traits>

constinit auto n1 = 9223372036854775807; // 2^63 - 1
static_assert(std::is_same_v<decltype(n1), signed long long int>);

constinit auto n2 = 9223372036854775808; // 2^63
constinit auto n3 = 18446744073709551615; // 2^64 - 1

#if defined _MSC_VER || defined __clang__
static_assert(std::is_same_v<decltype(n2), unsigned long long int>);
static_assert(std::is_same_v<decltype(n3), unsigned long long int>);
#elif defined __GNUC__
static_assert(std::is_same_v<decltype(n2), __int128>);
static_assert(std::is_same_v<decltype(n3), __int128>);
#endif

#if defined __GNUC__ && !defined __clang__
constinit auto n4 = 18446744073709551616; // 2^64
static_assert(std::is_same_v<decltype(n4), int>);
#endif

A verificação de sintaxe é aprovada sem erros:

g++ -std=c++2c p43.cxx -Wall -Wextra -Wpedantic -fsyntax-only
clang++ -std=c++2c p43.cxx -Wall -Wextra -Wpedantic -fsyntax-only
cl /nologo /std:c++latest /nologo /Wall /wd4577 p43.cxx /Zs

(para cl, C4577 está desabilitado para maior clareza)

Visto que usei apenas literais decimais, se entendi corretamente o texto do rascunho atual, [lex.icon]/3 diz que um dos int, long intou long long intdeve ser escolhido. /4 permite usar um tipo inteiro estendido se estes não puderem ser usados, os quais parecem ser diferentes dos padrões conforme [basic.fundamental]/1,2,5 .

Todos os compiladores concordam que n1é signed long long int.

Para n2e n3, o MSVC não emite avisos, o clang emite este aviso:

aviso: literal inteiro é muito grande para ser representado em um tipo inteiro assinado, interpretando como não assinado`

e o GCC emite o mesmo tipo de aviso que o clang, mas escolhe o tipo estendido (assinado).

A definição n4só funciona com GCC, mas o tipo nem é o estendido, mas sim int.

O MSVC e o clang dariam um erro sobre ser muito grande.

Não deveria 9223372036854775808e 18446744073709551615seria malformado se signed __int128não fosse suportado?

O GCC evidentemente suporta __int128por padrão, mas 18446744073709551616é transformado em um int, mesmo que se encaixe em signed __int128. Por que isso acontece?

Editar (com base no comentário): Não especifiquei minha plataforma. PC Windows x86-64 LLP64

c++
  • 1 respostas
  • 94 Views
Martin Hope
angelcervera
Asked: 2025-04-05 23:45:12 +0800 CST

Erro do Firebase: Não é possível sincronizar o estado de autenticação do Firebase

  • 5

Estou usando uma conta de serviço para implantar usando o Firebase CLI da ação do Github.

Este é o conjunto de permissões que esta conta possui:

ROLE
roles/cloudfunctions.admin
roles/firebase.sdkAdminServiceAgent
roles/firebaseauth.admin
roles/iam.serviceAccountTokenCreator
roles/storage.admin

Mas ao implantar, ainda recebo este erro:

⚠  hosting:channel: Unable to add channel domain to Firebase Auth. Visit the Firebase Console at https://console.firebase.google.com/project/XXXXX-dev3/authentication/providers
⚠  hosting:channel: Unable to sync Firebase Auth state.

A propósito: por que pedir para visitar https://console.firebase.google.com/project/XXXXX-dev3/authentication/providers?

  • 1 respostas
  • 18 Views
Martin Hope
Deepak Sharma
Asked: 2025-04-05 23:42:57 +0800 CST

SwiftUI ScrollView scrollTargetLayout não está funcionando

  • 5

Tenho a seguinte implementação de scrubber no SwiftUI. O +botão deve mover para ScrollViewcima em 1 tick (ou scrollPositionincrementado em 1), mas o problema é que não há rolagem até que eu clique 8-9 vezes. Isso é um bug no iOS ou um erro de programação?


struct BrokenVerticalScrubberDemo: View {
    @State private var scrollPosition: Int? = 0
    @State private var count: Int = 20

    var body: some View {
        VStack {
            Text("Scroll Position: \(scrollPosition ?? 0)")
                .font(.headline)

            ScrollView(.vertical, showsIndicators: true) {
                VStack(spacing: 8) {
                    ForEach(0..<count, id: \.self) { index in
                        Text("Tick \(index)")
                            .frame(height: 30)
                            .id(index)
                    }
                }
                .scrollTargetLayout()
                .padding(.vertical, 50)
            }
            .scrollTargetBehavior(.viewAligned)
            .scrollPosition(id: $scrollPosition)
            .frame(height: 300)
            .border(Color.gray)

            Button("+1") {
                withAnimation {
                    scrollPosition = min((scrollPosition ?? 0) + 1, count - 1)
                }
            }
            .padding(.top)
        }
        .padding()
    }
}

#Preview {
    BrokenVerticalScrubberDemo()
}

Por outro lado, se eu usar ScrollViewReadercomo solução alternativa, ele começa a rolar após 2 toques no botão '+'.

import SwiftUI

struct SomeWhatWorkingVerticalScrubberDemo: View {
    @State private var scrollPosition: Int = 0
    @State private var count: Int = 20

    var body: some View {
        VStack {
            Text("Scroll Position: \(scrollPosition)")
                .font(.headline)

            ScrollView(.vertical, showsIndicators: true) {
                ScrollViewReader { scrollViewProxy in
                    VStack(spacing: 8) {
                        ForEach(0..<count, id: \.self) { index in
                            Text("Tick \(index)")
                                .frame(height: 30)
                                .id(index)
                        }
                    }
                    .padding(.vertical, 50)
                    .onChange(of: scrollPosition) { newPosition in
                        withAnimation {
                            scrollViewProxy.scrollTo(newPosition, anchor: .center)
                        }
                    }
                }
            }
            .frame(height: 300)
            .border(Color.gray)

            Button("+1") {
                scrollPosition = min(scrollPosition + 1, count - 1)
            }
            .padding(.top)
        }
        .padding()
    }
}

#Preview {
    SomeWhatWorkingVerticalScrubberDemo()
}

  • 2 respostas
  • 50 Views
Martin Hope
PAA
Asked: 2025-04-05 23:28:11 +0800 CST

Causado por: java.lang.IllegalArgumentException: O nome do trabalho deve ser especificado no caso de vários trabalhos - Spring Batch

  • 6

Estou migrando o Spring Boot Batch App da versão 2.7.1 para 3.2.10 e estou recebendo o erro abaixo. A documentação não sugere como resolver o problema. Alguém pode sugerir?

Erro:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobLauncherApplicationRunner' defined in class path resource [org/springframework/boot/autoconfigure/batch/BatchAutoConfiguration.class]: Job name must be specified in case of multiple jobs
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.13.jar:6.1.13]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.13.jar:6.1.13]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.10.jar:3.2.10]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.10.jar:3.2.10]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.2.10.jar:3.2.10]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.2.10.jar:3.2.10]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.2.10.jar:3.2.10]
    at com.example.demo.Application.main(Application.java:11) ~[classes/:na]
Caused by: java.lang.IllegalArgumentException: Job name must be specified in case of multiple jobs
    at org.springframework.util.Assert.isTrue(Assert.java:111) ~[spring-core-6.1.13.jar:6.1.13]
    at org.springframework.boot.autoconfigure.batch.JobLauncherApplicationRunner.afterPropertiesSet(JobLauncherApplicationRunner.java:115) ~[spring-boot-autoconfigure-3.2.10.jar:3.2.10]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.13.jar:6.1.13]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.13.jar:6.1.13]
    ... 15 common frames omitted


Process finished with exit code 1

ChilJobConfig.java

package com.example.demo;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
public class ChildJobConfiguration {
    @Autowired
    private JobRepository jobRepository;
    @Autowired
    private PlatformTransactionManager transactionManager;


    @Bean
    public Step step1a() {
        return new StepBuilder("step1a", jobRepository)
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("\t>>This is step 1a");

                    return RepeatStatus.FINISHED;
                }, transactionManager).build();
    }

    @Bean
    public Job childJob() {
        return new JobBuilder("childJob", jobRepository)
                .start(step1a())
                .build();
    }
}

ParentJobConfig.java

package com.example.demo;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.JobStepBuilder;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;

@Configuration
public class ParentJobConfiguration {

    @Autowired
    private JobRepository jobRepository;
    @Autowired
    private PlatformTransactionManager transactionManager;

    @Autowired
    private Job childJob;

    @Autowired
    private JobLauncher jobLauncher;

    @Bean
    public Step step1() {
        return new StepBuilder("step1", jobRepository)
                .tasklet((contribution, chunkContext) -> {
                    System.out.println(">> This is step 1");
                    return RepeatStatus.FINISHED;
                }, transactionManager).build();
    }

    @Bean
    public Job parentJob(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
        Step childJobStep = new JobStepBuilder(new StepBuilder("childJobStep", jobRepository))
                .job(childJob)
                .launcher(jobLauncher)
                .build();

        return new JobBuilder("parentJob", jobRepository)
                .start(step1())
                .next(childJobStep)
                .build();
    }
}

MainApp.java

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

aplicação.propriedades

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.schema=schema-mysql.sql

spring.batch.job.names=parentJob
spring
  • 1 respostas
  • 35 Views
Martin Hope
Utsav
Asked: 2025-04-05 23:18:09 +0800 CST

Retorna o primeiro inteiro positivo ausente

  • 6

Há uma lista de inteiros com valores positivos e negativos. Precisamos retornar o primeiro inteiro positivo ausente.

Por exemplo.

  1. Entrada - 3 -1 1 0 4 , Saída Esperada - 2
  2. Entrada - -1 -4 -3, Saída Esperada - 1
  3. Entrada - 1 3 2, Saída esperada - 4

Eu poderia chegar à solução abaixo que pode ter muito escopo para otimização. Só queria verificar se poderia haver uma solução O(n) que não usasse lógica de classificação. Se não, então alguma outra solução otimizada abaixo.

q)f: {if[all x<1;:1]; x: asc x where x>0;  b:1+first where not x=1+til count x; $[0N=b;1+last x;b]}
q)f -1 -4 -3
1
q)f 1 3 2
4
q)f 3 -1 1 0 4
2
kdb+
  • 2 respostas
  • 73 Views
Martin Hope
seraph
Asked: 2025-04-05 22:47:06 +0800 CST

Acesse um servidor Git LFS por trás do mTLS, com um certificado de cliente PKCS#12

  • 6

Tenho um repositório git hospedado no GitHub e um servidor Git LFS giftless auto-hospedado na minha própria nuvem pública. Eu uso um .lfsconfigpara apontar os hooks de commit para minha instância lfs em vez da do GitHub. Isso funciona corretamente por si só.

No entanto, meus serviços de nuvem são protegidos por mTLS usando um certificado e uma chave privada gerados pelo Cloudflare, que eu então uso OpenSSL para empacotar em um keystore protegido por senha PKCS#12 para distribuição. Isso funciona para acessar meus serviços baseados na web por meio de navegadores, onde posso importar qualquer .pfxarquivo facilmente, mas não tenho certeza de como usar esse keystore com o git para permitir acesso ao servidor LFS (que é protegido pelo mesmo certificado).

Trabalhando com esta resposta , tentei uma série de transformações no .p12arquivo usando OpenSSL e diferentes permutações da configuração de rede do Git , mas estou tendo alguma dificuldade em descobrir onde cada parte do keystore precisa ser definida nas httpopções. Toda vez, recebo a seguinte saída ao tentar enviar para o LFS do meu repositório:

(test-ca.crt e test-cl.crt são derivados do arquivo .p12 anteriormente)

$ git -c http.sslcainfo=test-ca.crt -c http.sslCert=test-cl.crt \
  -c http.sslCertPasswordProtected lfs push origin main

Password for 'cert:///test-cl.crt':

warning: Authentication error: Authentication required: 
         Authorization error: https://git-lfs.my-cloud.com/user/repo/locks/verify
Check that you have proper access to the repository

Isso faz com que os arquivos rastreados pelo LFS não sejam enviados para o armazenamento de objetos.

Tenho clientes confiáveis ​​na minha nuvem que também precisam de acesso a este servidor LFS, que usam diferentes sistemas operacionais, incluindo Ubuntu e Windows. Não tenho certeza se git-basho Windows usaria o repositório global de certificados de usuário do SO para LFS, e não consigo descobrir como instalar um certificado de cliente em todo o sistema no Ubuntu também.

git
  • 1 respostas
  • 35 Views
Martin Hope
bbdd
Asked: 2025-04-05 22:13:04 +0800 CST

Como otimizar um Gerenciador de Eventos em uma arquitetura de plugin modular Qt/C++ para melhorar o desempenho?

  • 7

No momento, minha tarefa é desenvolver um aplicativo para desenho. Para resolver esse problema, foi decidido usar QT/C++ . Como esta é a primeira vez na minha carreira que estou desenvolvendo um aplicativo GUI que consiste em um grande número de módulos, plug-ins e lógica, foi decidido usar um EventManager para comunicar todos os módulos entre si.

Quase todos os módulos (plugins) não sabem sobre a existência de outros módulos e se comunicam com o aplicativo principal usando o mesmo gerenciador de eventos enviando eventos para ele ou esperando por eventos. Mas há plugins que enviam eventos com muita frequência, o que afeta o desempenho. Como otimizar o gerenciador de eventos para melhor desempenho. Como exemplo, apresento abaixo um instantâneo de como os módulos existem isolados uns dos outros e se comunicam com a "Página de desenho" apenas enviando mensagens.

Arquitetura abstrata de comunicação entre módulos e a janela principal

O Gerenciador de Eventos em si é uma classe estática simples que recebe uma string como o tipo de evento e QVariant como o parâmetro deste evento!


// event-manager.h

#include <QObject>
#include <functional>
        
class EventManager final :
    public QObject
{
    Q_OBJECT

public:

    using EventCallback = std::function<void(const QString&, const QVariant&)>;

    void triggerEvent(const QString &eventName, const QVariant& value) noexcept;
    void registerEvent(const QString &eventName, QObject *receiver, EventCallback) noexcept;
    void unregisterEvent(const QString &eventName, QObject *receiver) noexcept;

    static EventManager& instance() noexcept;

signals:

    void eventTriggered(const QString &eventName, const QVariant& value);

private:

    explicit EventManager(QObject *parent = nullptr);
    virtual ~EventManager() override;

private:

    struct Private;
    Private *d_ptr;

};

// event-manager.cpp

#include "event-manager.cpp"

#include <QHash>
#include <QMap>
#include <QMutex>
#include <QMutexLocker>
#include <QPointer>
#include <QVariant>

struct EventManager::Private {

    struct EventSlot {
        QPointer<QObject> receiver;
        EventCallback     callback;
    };

    QMutex                          mutex;
    QMap<QString, QList<EventSlot>> events;
};

EventManager::EventManager(QObject *aParent) :
    QObject(aParent),
    d_ptr(new EventManager::Private)
{}

EventManager::~EventManager()
{
    delete d_ptr; 
}

void EventManager::triggerEvent(const QString&  aEventName, const QVariant& aValue) noexcept
{
    if (!aEventName.isEmpty()) {
        QMutexLocker locker(&d_ptr->mutex);
        const bool found = d_ptr->events.contains(aEventName);
        locker.unlock();
        if (!found) { return; }
        locker.relock();
        QList<Private::EventSlot> eventSlots;
        eventSlots = d_ptr->events[aEventName];
        locker.unlock();
        for (const auto& eventSlot : std::as_const(eventSlots)) {
            if (!eventSlot.receiver.isNull()) {
                QMetaObject::invokeMethod(eventSlot.receiver,
                    [callback = eventSlot.callback, aEventName, aValue]() {
                    callback(aEventName, aValue);
                }, Qt::QueuedConnection);
            }
        }
        emit eventTriggered(aEventName, aValue);
    }
}

void EventManager::registerEvent(const QString& aEventName, QObject* aReceiver, EventCallback aCallback) noexcept
{
    if (!aEventName.isEmpty() && aReceiver) {
        QMutexLocker locker(&d_ptr->mutex);
        Private::EventSlot eventSlot;
        eventSlot.callback = std::move(aCallback);
        eventSlot.receiver = aReceiver;
        d_ptr->events[aEventName].append(eventSlot);
    }
}

void EventManager::unregisterEvent(const QString &aEventName, QObject *aReceiver) noexcept
{
    if (!aEventName.isEmpty() && aReceiver) {
        QMutexLocker locker(&d_ptr->mutex);
        if (d_ptr->events.contains(aEventName)) {
            auto &eventSlots = d_ptr->events[aEventName];
            eventSlots.erase(std::remove_if(eventSlots.begin(), eventSlots.end(),
                [aReceiver](const Private::EventSlot &slot) {
                    return slot.receiver == aReceiver;
                }), eventSlots.end());
        }
    }
}

EventManager& EventManager::instance() noexcept
{
    static EventManager EventManager;
    return EventManager;
}


Na imagem acima, "ToolBarWidget1" envia um evento para "ZoomIn", e "Drawing Page" escuta esse evento e, ao receber tal evento, reage a ele. Não há problemas, mas assim que preciso, por exemplo, enviar um evento de movimento do mouse da "Drawing page", aparecem travamentos e o programa cai de desempenho. Não é recomendado conectar diretamente a "Drawing page" com módulos, porque dessa forma evitamos a vinculação rígida de módulos. Como isso pode ser otimizado?

PS : 1. Exemplo de envio de um evento:

EventManager::instance().triggerEvent("toolBarWidget1", "zoomIn");

PS : 2. Exemplo de tratamento de eventos:

EventManager::instance().registerEvent("toolBarWidget1",
    this, [this](const QString& eventType, const QVariant& eventValue) {
    (void) eventType;
    if (eventValue.toString() == "zoomIn") { 
        drawingPage->zoomIn(); 
    }
});
c++
  • 1 respostas
  • 73 Views
Martin Hope
Aztec-3x5
Asked: 2025-04-05 22:05:28 +0800 CST

Obter o maior número único ou NULL se nenhum existir

  • 6

Quero o maior número único possível da tabela. Há duplicatas na tabela, então quero que o resultado final reflita nulo porque não há um único número maior.

Eu tentei todas as modificações possíveis na minha consulta para que meu código retornasse valores nulos, mas não retorna. Esse é um problema do leetcode que eu estava tentando resolver e tentando construir um entendimento muito mais profundo do problema na minha consulta SQL.

Só precisava saber como posso introduzir valores NULL manualmente. Eu sei a resposta de codificação real para a pergunta, e é por isso que preciso de uma boa explicação do que estou fazendo errado, junto com modificações neste código.

Obrigado por toda a ajuda que vocês fornecem.

Entrada:

num
8
8
7
7
3
3

Saída:

num

Esperado:

num
nulo

Aqui está o código:

/* Write your T-SQL query statement below */
WITH CTE AS
(
    SELECT *,
    ROW_NUMBER() OVER (PARTITION BY num ORDER BY num) AS RN
    FROM MyNumbers
),
CTE2 AS
(
    SELECT TOP 1 num 
    FROM CTE
    WHERE num NOT IN (SELECT num FROM CTE WHERE RN >= 2)
    ORDER BY num DESC
)
SELECT 
    (CASE
         WHEN num IS NULL OR num = '' 
             THEN NULL
             ELSE num
     END) AS num FROM CTE2;
sql
  • 2 respostas
  • 95 Views
Martin Hope
Walter W. Walker
Asked: 2025-04-05 22:04:55 +0800 CST

É possível usar uma variável de macro ao lado de um texto já existente

  • 7

Quero usar ponteiros exclusivos com sdl2, mas a declaração para fazê-los funcionar pode ser longa, então eu estava tentando usar um #defineque me permitisse simplesmente inserir o tipo que eu quero extrair e usá-lo.

Mas eu me deparei com o problema simples de que o parâmetro macro não é reconhecido quando está adjacente a outro texto. Por exemplo, na seguinte declaração:

#define SDL(type) SDL_type

o typeno texto de substituição é tratado como parte de uma palavra maior em vez de um parâmetro de macro. A intenção é que SDL(int)se tornaria SDL_int, mas em vez disso se torna SDL_type, ignorando o argumento fornecido.

Existe algum tipo de sinalizador ou token que me permita simplesmente "inserir" o conteúdo da variável ao lado do texto já existente sem adicionar nada ao define?

Aqui está como o compilador expande uma macro similar. A expansão relatada pelo compilador Em vez de SDL_(Texture)and SDL_Destroy(Texture), a expansão desejada é SDL_Textureand SDL_DestroyTexture.

c++
  • 1 respostas
  • 57 Views
Martin Hope
Mose
Asked: 2025-04-05 21:55:46 +0800 CST

Grupos LDAP do JFrog

  • 5

Estou executando o JFrog Artifactory 7.104 e tentando configurar a autenticação no Active Directory (via LDAP). As configurações do LDAP funcionam bem, mas as configurações do grupo LDAP não retornam nenhum resultado.

Configuração (baseDN ofuscado por razões óbvias):

URL: ldap://ad.example.com
Email Attribute: mail
Search Filter: sAMAccountname={0}
Search Base: OU=Users,DC=ad,DC=example,DC=com|OU=Partners,DC=ad,DC=example,DC=com
Manager DN: CN=ldapbind,OU=Admin,DC=ad,DC=example,DC=com

Consegui fazer uma conexão de teste com sucesso e me autentiquei como usuário LDAP com o método acima. No entanto, as configurações do grupo LDAP nunca se propagam. Segui o exemplo fornecido em https://jfrog.com/screencast/configure-artifactory-with-ldap/ e até tentei as configurações conforme https://jfrog.com/help/r/jfrog-platform-administration-documentation/support-for-nested-entra-id-groups .

Primeira tentativa de configuração:

Mapping Strategy: static
Group Member Attribute: member
Group Name Attrubute: cn
Description Attribute: description
Filter: (objectClass=group)
Search Base: DC=ad,DC=example,DC=com
Search Subtree: True

Configuração modificada:

Mapping Strategy: dynamic
Group Member Attribute: member:1.2.840.113556.1.4.1941:
Group Name Attrubute: cn
Description Attribute: description
Filter: (objectClass=group)
Search Base: DC=ad,DC=example,DC=com (Also tried null value)
Search Subtree: True

Eu até verifiquei minhas configurações no servidor via ldapsearche consegui retornar objetos desejados usando os valores base de pesquisa usando as mesmas credenciais configuradas no aplicativo.

O DN base real que desejo usar OU=jfrog,OU=Groups,DC=ad,DC=example,DC=comconterá grupos mapeados para o aplicativo. Esses grupos conterão indivíduos e grupos de indivíduos.

active-directory
  • 1 respostas
  • 14 Views
Prev
Próximo

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