Используя класс в пространстве имен с тем же именем?

Можно реализовать IXmlSerializable, к сожалению, это инвертирует самое важное преимущество XmlSerializer (способность декларативно управлять сериализацией). DataContractSerializer (xml базирующийся) и BinaryFormatter (базирующийся двоичный файл) мог использоваться в качестве альтернатив XmlSerializer каждый имеющий его за и против.

11
задан jww 5 May 2017 в 18:10
поделиться

4 ответа

Я не знаю, что неоднозначно, но вы можете избежать всех конфликтов с другими Foo работает следующим образом:

namespace ALongNameToType {
    struct ALongNameToType {
        static void Foo();   
    };
}

typedef ALongNameToType::ALongNameToType Shortname;

int main() {
    Shortname::Foo();
}
20
ответ дан 3 December 2019 в 03:35
поделиться
namespace myns = ALongNameToType;

Похоже, вы не можете создать псевдоним для области действия класса следующим образом:

// second ALongNameToType is a class
namespace myns = ALongNameToType::ALongNameToType;

Возможно, вы могли бы присвоить псевдоним самой функции:

namespace foo
{
 class foo
 {
 public:
  static void fun()
  {

  }
 };
}

int main()
{
 void (*myfunc)() = foo::foo::fun;

 myfunc();
}
3
ответ дан 3 December 2019 в 03:35
поделиться
using ALongNameToType::ALongNameToType::Foo;

, если вы просто хотите использовать его как Foo () .

3
ответ дан 3 December 2019 в 03:35
поделиться

Есть три способа использовать с помощью . Один предназначен для всего пространства имен, один - для определенных вещей в пространстве имен, а третий - для производного класса, говорящего, что он не хочет скрывать что-то объявленное / определенное в базовом классе. Вы можете использовать второй из них:

using ALongNameToType::ALongNameToType

К сожалению, это не работает для вас (из-за неоднозначности пространства имен и класса с тем же именем). Объединение этого типа использования с предыдущим ответом должно избавить от двусмысленности:

namespace alntt = ALongNameToType;
using alntt::ALongNameToType;

Но после того, как вы переименовали пространство имен, вам действительно не нужен оператор using (пока вы удобное написание (сокращенного) пространства имен каждый раз, когда вы используете класс:

namespace alntt = ALongNameToType;
alntt::ALongNameToType a;
...
1
ответ дан 3 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: