Можно реализовать IXmlSerializable, к сожалению, это инвертирует самое важное преимущество XmlSerializer (способность декларативно управлять сериализацией). DataContractSerializer (xml базирующийся) и BinaryFormatter (базирующийся двоичный файл) мог использоваться в качестве альтернатив XmlSerializer каждый имеющий его за и против.
Я не знаю, что неоднозначно, но вы можете избежать всех конфликтов с другими Foo работает следующим образом:
namespace ALongNameToType {
struct ALongNameToType {
static void Foo();
};
}
typedef ALongNameToType::ALongNameToType Shortname;
int main() {
Shortname::Foo();
}
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();
}
using ALongNameToType::ALongNameToType::Foo;
, если вы просто хотите использовать его как Foo ()
.
Есть три способа использовать с помощью
. Один предназначен для всего пространства имен, один - для определенных вещей в пространстве имен, а третий - для производного класса, говорящего, что он не хочет скрывать что-то объявленное / определенное в базовом классе. Вы можете использовать второй из них:
using ALongNameToType::ALongNameToType
К сожалению, это не работает для вас (из-за неоднозначности пространства имен и класса с тем же именем). Объединение этого типа использования с предыдущим ответом должно избавить от двусмысленности:
namespace alntt = ALongNameToType;
using alntt::ALongNameToType;
Но после того, как вы переименовали пространство имен, вам действительно не нужен оператор using
(пока вы удобное написание (сокращенного) пространства имен каждый раз, когда вы используете класс:
namespace alntt = ALongNameToType;
alntt::ALongNameToType a;
...