Немного более функциональный и простой в использовании:
function exist(obj)
{
return (typeof obj !== 'undefined');
}
Функция вернет true , если существует, else false , если не существует .
Вы близки, можно передать, объявляют класс в пространстве имен и затем определяют его снаружи, если Вы хотите:
namespace ns {
class A; // just tell the compiler to expect a class def
}
class ns::A {
// define here
};
то, Что Вы не можете сделать, определяют класс в пространстве имен без участников и затем определяют класс снова за пределами пространства имен. Это нарушает Одно Правило Определения (или somesuch ерунда).
Можно сделать это, но это не действительно больше succint.
namespace ns {
class A;
}
class ns::A {
};
Или
namespace ns {
class B;
}
using ns::B;
class B {
};
Раздел, который необходимо читать, является этим:
7.3.1.2 членских определения Пространства имен
3 Каждых имени, сначала объявленные в пространстве имен, являются членом того пространства имен. [...]
Примечание термин - объявление, таким образом, D.Shawley (и его пример) корректен.
Нет Вы не можете. Для заключения в кавычки стандарта C++ разделите 3.3.5:
имя А, объявленное вне всех именованных или пространств имен без имени (7.3), блоки (6.3), забава (8.3.5), функциональные определения (8.4) и классы (пункт 9), имеет объем глобального пространства имен
, Таким образом, объявление должно быть в блоке пространства имен - определение может, конечно, быть снаружи.