Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
#1

Возможно ли спрятать класс из области видимости? - C++

15.08.2014, 08:45. Просмотров 332. Ответов 5
Метки нет (Все метки)

Здравствуйте!

У меня есть технический класс, который используется только в одном другом классе, и при этом вышеозначенный технический класс нельзя упрятать в private, protected этого самого другого класса. Сходу решения не нашел.

Есть какие-либо идеи?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2014, 08:45     Возможно ли спрятать класс из области видимости?
Посмотрите здесь:

Оператор разрешения области видимости C++
C++ Подскажите пожалуйста, об области видимости объектов
C++ Инициализация вне области видимости
Нет декларации «EOF» в этой области видимости C++
C++ Классы, наследование, области видимости
C++ Вопрос об области видимости переменной
C++ Изменение области видимости функции
C++ Области видимости функций
C++ Области видимости
Как скрыть из области видимости часть методов базового класса после наследования? C++
C++ Расширение области видимости класса, за пределами цикла
Выражение должно относиться к целочисленному типу или типу перечисления без области видимости C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2449 / 1621 / 238
Регистрация: 24.11.2012
Сообщений: 3,989
15.08.2014, 08:47     Возможно ли спрятать класс из области видимости? #2
Цитата Сообщение от relationer Посмотреть сообщение
нельзя упрятать в private, protected этого самого другого класса
Почему, если он больше нигде не используется?

PS Определение утилитарного класса можно перенести в .cpp, где он непосредственно используется.
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
15.08.2014, 09:47  [ТС]     Возможно ли спрятать класс из области видимости? #3
Утилитарный класс используется как база для шаблонного класса. Т. е. я не хочу, что бы было Class<T>::Base.
Реализацию вынести в cpp не получится - я пишу реализацию шаблона в hpp, отдельно выделив раздел, как будто бы включенный cpp файл.
0x10
2449 / 1621 / 238
Регистрация: 24.11.2012
Сообщений: 3,989
15.08.2014, 10:03     Возможно ли спрятать класс из области видимости? #4
Сложно что-то конкретное без контекста сказать.
Пока только возникает вопрос: если утилиарный класс является базой для единственного класса, почему он вообще выделен в базовый класс?

Или я чего-то не понимаю. Или нужен минимальный компилируемый пример кода (http://sscce.org/).
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
15.08.2014, 10:44  [ТС]     Возможно ли спрятать класс из области видимости? #5
Единственный класс - шаблонный. Мне необходимо единое private static-поле на все классы, сгенерированные по шаблону.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
15.08.2014, 12:09     Возможно ли спрятать класс из области видимости? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
relationer, обычно технические классы помещают в спец. пространства имен detail или impl. Этого чаще всего достаточно, чтобы показать, что класс не для внешнего использования.
Но если уж очень хочется прям совсем запретить, то можно так, например, поступить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class impl_
{
    class InnerInvisible
    {
    protected:
        static int var;
    };
 
    template <typename T>
    friend class SomeWorker;
};
 
int impl_::InnerInvisible::var = 5;
 
template <typename T>
class SomeWorker : impl_::InnerInvisible
{
public:
    void foo()
    {
        std::cout << this->var << std::endl;
    }
};
 
int main()
{
    SomeWorker<int> s;
    s.foo();
}
Или просто запретить наследоваться и использовать этот класс всем, кроме SomeWorker (конструкторы и деструкторы в private, SomeWorker - шаблонный друг).


PS. ты бы сильно увеличил количество желающих тебе помочь, если бы все-таки показал хотя бы примерный код того, чего хочешь получить. Ведь не все тут телепаты
Yandex
Объявления
15.08.2014, 12:09     Возможно ли спрятать класс из области видимости?
Ответ Создать тему
Опции темы

Текущее время: 08:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru