Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Portuguese
  4. Classe protected em biblioteca
Forum Updated to NodeBB v4.3 + New Features

Classe protected em biblioteca

Scheduled Pinned Locked Moved Solved Portuguese
6 Posts 3 Posters 2.3k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    Exotic_Devel
    wrote on last edited by Exotic_Devel
    #1

    Meu projeto é composto de subprojetos, vários desses são projetos de biblioteca estática, que são bibliotecas de classes. Porém, tenho uma classe nesse projeto que não pode ser exportada para fora da biblioteca, ou seja, essa classe deve ser acessível somente por outras classes dentro da biblioteca.
    No Qt Creator quando adicionamos uma biblioteca a um projeto (Botão direito no projeto >>Add library) o projeto no qual a biblioteca foi adicionada passa a ter acesso a todas as classes da biblioteca. Tem como limitar isso, igual as classes protected no Java que só podem ser acessadas dentro do mesmo pacote?

    T 1 Reply Last reply
    0
    • E Exotic_Devel

      Meu projeto é composto de subprojetos, vários desses são projetos de biblioteca estática, que são bibliotecas de classes. Porém, tenho uma classe nesse projeto que não pode ser exportada para fora da biblioteca, ou seja, essa classe deve ser acessível somente por outras classes dentro da biblioteca.
      No Qt Creator quando adicionamos uma biblioteca a um projeto (Botão direito no projeto >>Add library) o projeto no qual a biblioteca foi adicionada passa a ter acesso a todas as classes da biblioteca. Tem como limitar isso, igual as classes protected no Java que só podem ser acessadas dentro do mesmo pacote?

      T Offline
      T Offline
      TioRoy
      wrote on last edited by
      #2

      @Exotic_Devel ,

      Pelo que sei de C++ (e não sou um expert), não existe o mesmo comportamento de Java ou C# em visibilidade da classes.

      Voce pode tentar esconder a implementação, usando um design pattern chamado d-pointer (ou opaque pointer, ou ainda bridge pattern). O Qt usa este mecanismo para não expor a implementação para quem usa.

      Este texto está em inglês, mas achei muito bom.

      E 1 Reply Last reply
      0
      • T TioRoy

        @Exotic_Devel ,

        Pelo que sei de C++ (e não sou um expert), não existe o mesmo comportamento de Java ou C# em visibilidade da classes.

        Voce pode tentar esconder a implementação, usando um design pattern chamado d-pointer (ou opaque pointer, ou ainda bridge pattern). O Qt usa este mecanismo para não expor a implementação para quem usa.

        Este texto está em inglês, mas achei muito bom.

        E Offline
        E Offline
        Exotic_Devel
        wrote on last edited by Exotic_Devel
        #3

        @TioRoy Interessante esse designer. Porém não era bem isso que eu tinha em mente. O que eu quero é fazer com que usuários da biblioteca sequer saibam da existência dessa classe, ou seja, não poderem dar include no .h, não sendo possível herdar ou tentar reimplementar.
        Resumindo, para o usuário da biblioteca essa classe não existe, pois trata-se de uma classe abstrata que serve de base paras as outras classes da biblioteca, ela não faz sentido fora da biblioteca. Eu pensei em deixá-la toda em um .cpp para que não exista headers para dar include e nas classes dentro da biblioteca dar include no .cpp, mas segundo algumas pesquisas que fiz, encontrei muitos alertas e desaconselhamentos de usar include .cpp.

        T 1 Reply Last reply
        0
        • L Offline
          L Offline
          Leonardo
          wrote on last edited by
          #4

          O usuário só vai ter o header se você enviar pra ele. Além disso, as classes não são exportadas por padrão. Você precisa marcar as que serão com __declspec(dllexport), não?

          E 1 Reply Last reply
          0
          • L Leonardo

            O usuário só vai ter o header se você enviar pra ele. Além disso, as classes não são exportadas por padrão. Você precisa marcar as que serão com __declspec(dllexport), não?

            E Offline
            E Offline
            Exotic_Devel
            wrote on last edited by
            #5

            @Leonardo Como falei essa biblioteca é um subprojeto de um projeto maior. No Qt Creator quando você importa (Add Library) uma biblioteca que está em outro projeto ela já dá acesso aos headers da biblioteca.
            Meu ambiente é Ubuntu, GCC, Qt Creator, se não estou enganado __declspec não se aplica.

            1 Reply Last reply
            0
            • E Exotic_Devel

              @TioRoy Interessante esse designer. Porém não era bem isso que eu tinha em mente. O que eu quero é fazer com que usuários da biblioteca sequer saibam da existência dessa classe, ou seja, não poderem dar include no .h, não sendo possível herdar ou tentar reimplementar.
              Resumindo, para o usuário da biblioteca essa classe não existe, pois trata-se de uma classe abstrata que serve de base paras as outras classes da biblioteca, ela não faz sentido fora da biblioteca. Eu pensei em deixá-la toda em um .cpp para que não exista headers para dar include e nas classes dentro da biblioteca dar include no .cpp, mas segundo algumas pesquisas que fiz, encontrei muitos alertas e desaconselhamentos de usar include .cpp.

              T Offline
              T Offline
              TioRoy
              wrote on last edited by
              #6

              @Exotic_Devel

              Você pode compilar as bibliotecas estaticas em separado, e incluir no QtCreator apenas os includes que voce quer expor. Seria tipo um framework (com includes publicos e privados). Vai dar um pouco mais de trabalho, mas assim você esconde o que você quer.

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved