Могу ли я объявить «использование пространства имен» внутри класса C ++? - PullRequest
13 голосов
/ 15 февраля 2012

Предположим, есть класс C ++. И есть пространство имен, которое должно быть видно только внутри моего класса. Что для этого сделать?

class SomeClass
{
    using namespace SomeSpace;

public:
    void Method1();
    void Method2();
    void Method3();
};

namespace SomeSpace
{
    /*some code*/
};

Ответы [ 2 ]

7 голосов
/ 15 февраля 2012

using namespace X; называется с использованием директивы и может появляться только в области имен и в области функций, но не в области классов. Поэтому то, что вы пытаетесь сделать, невозможно в C ++. Лучшее, что вы можете сделать, - написать директиву using в области имен этого класса, что может быть нежелательно.

Если подумать, анализируя ваши слова,

Предположим, есть класс C ++. И есть пространство имен, которое должно быть виден только внутри моего класса. Что для этого сделать?

Я бы предложил что-то вроде следующего, но я не уверен, что вы хотите.

class A
{
public:
    void Method1();
    void Method2();
    void Method3();

private:

    class B
    {
       //public static functions here, instead of namespace-scope
       // freestanding functions.
       //these functions will be accessible from class A(and its friends, if any) 
       //because B is private to A
    };

};
0 голосов
/ 15 февраля 2012

Нет, но вы можете сделать это следующим образом:

namespace SomeSpace
{
    /*some code*/
};

using namespace SomeSpace;

class SomeClass
{

public:
    void Method1();
    void Method2();
    void Method3();
};

Хотя не рекомендуется применять директиву use namespace в заголовочных файлах и часто считается плохим стилем.Это нормально, чтобы положить в исходный файл (.cpp) вашего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...