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

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

Восстановить пароль Регистрация
 
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
15.08.2014, 08:45     Возможно ли спрятать класс из области видимости? #1
Здравствуйте!

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

Есть какие-либо идеи?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
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
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
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
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
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:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru