На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> тип , external
    Привет всем!
    Есть у меня заголовочный файл. В нём описан класс по типу:
    ExpandedWrap disabled
      class A
      {
         public:
         void superFunction(someType a);
      };

    Так вот этот someType объявлен в некотором другом заголовочном файле, который мне бы хотелось подключать в *.cpp, а не в заголовочном. Я думал может быть есть на этот случай что-то по типу external ключевого слова, но для типов.
    Для чего это надо? чтоб не таскать за собой лишние заголовочные файлы, когда проект поставляется в виде заголовочного файла без файлов реализации + статичная библиотека lib.
    Есть ли такая вещь в С++?
    Спасибо большое заранее.
      Forward declaration?
        Цитата zhe123 @
        Forward declaration?

        Ёмко.
        Как посмотрел, вспомнил. Спасибо!
          И как будет выглядеть решение?
          Напишите, чтоб ньюбы ( такие как я ) увидели
            ExpandedWrap disabled
              // .h
              class someType; // forward declaration
              class A
              {
                 public:
                 void superFunction(someType* p); // указатель или ссылка
                                                  // (хотя, помоему, 8 студия уже разрешает передавать по значению)
              };

            ExpandedWrap disabled
              // .cpp
              #include "someType.h"
               
              void A::superFunction(someType* p)
              {
              }
            Сообщение отредактировано: =MOHAX= -
              форвард декларэйшн конечно хорошая вещь, но думаю к исходному посту не подойдет так как там superFunction(someType a); а не superFunction(someType* a); :wacko:
                Этот вопрос легко решается:
                superFunction(const someType& a);
                  :)
                    Цитата BlackEmperor @
                    форвард декларэйшн конечно хорошая вещь, но думаю к исходному посту не подойдет так как там superFunction(someType a); а не superFunction(someType* a); :wacko:

                    Не, объявлению функции знание размера аргумента не требуется.
                      Цитата BlackEmperor @
                      форвард декларэйшн конечно хорошая вещь, но думаю к исходному посту не подойдет так как там superFunction(someType a); а не superFunction(someType* a);

                      Да, совершенно правильно. Мне и не подошло к сожалению.
                      Цитата =MOHAX= @
                      superFunction(const someType& a);

                      Мне именно хотелось бы на стеке передовать свою копию переменной в функцию, т.к. там функция рекурсивная.
                        Цитата experimenter @
                        Да, совершенно правильно. Мне и не подошло к сожалению.

                        Значит, ты что-то не так делаешь, ибо всё должно работать.
                          А обертка над рекурсивной функцией не подойдет?
                            Цитата zhe123 @
                            А обертка над рекурсивной функцией не подойдет?

                            А зачем? :wacko:
                              Для того, чтобы в обертку передавать по константной ссылке, а в рекурсивной функции - на стеке
                              Сообщение отредактировано: zhe123 -
                                Цитата Unreal Man @
                                Значит, ты что-то не так делаешь, ибо всё должно работать.

                                Вполне может быть. Покажу, как там всё устроено.
                                Есть некий класс, в котором определена функция по типу:
                                ExpandedWrap disabled
                                  class MyxClass
                                  {
                                  public:
                                          real_1d_array DoSomething(
                                              real_1d_array xo);
                                  }

                                Так вот, проблема в этом типе real_1d_array. Он определён в некотором файле вот так:
                                ExpandedWrap disabled
                                  typedef template_1d_array<double>  real_1d_array;

                                У меня подозрения, что проблема в typdef. template_1d_array<double> же определён в том же описательном файле, где и template_1d_array.

                                Добавлено
                                Цитата zhe123 @
                                Для того, чтобы в обертку передавать по константной ссылке, а дальше на стеке

                                Так, а ту функцию, которой на стеке передавать, её же тоже описывать надо в том же заголовочном файле, т.е. придём к той же самой задаче, если я правильно понимаю.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0372 ]   [ 15 queries used ]   [ Generated: 19.05.24, 08:53 GMT ]