Using a class in a namespace with the same name?

前端 未结 4 979
耶瑟儿~
耶瑟儿~ 2021-01-11 15:11

I have to use an API provided by a DLL with a header like this

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


        
相关标签:
4条回答
  • 2021-01-11 15:32

    There are three ways to use using. One is for an entire namespace, one is for particular things in a namespace, and one is for a derived class saying it doesn't want to hide something declared/defined in a base class. You can use the second of those:

    using ALongNameToType::ALongNameToType
    

    Unfortunately this isn't working for you (due to the ambiguity of the namespace and the class having the same name). Combining this type of using with a previous answer should get rid of the ambiguity:

    namespace alntt = ALongNameToType;
    using alntt::ALongNameToType;
    

    But once you've renamed the namespace, you really don't need the using statement (as long as you're comfortable writing the (shortened) namespace every time you use the class:

    namespace alntt = ALongNameToType;
    alntt::ALongNameToType a;
    ...
    
    0 讨论(0)
  • 2021-01-11 15:40
    namespace myns = ALongNameToType;
    

    It seems that you can't alias a class scope like this:

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

    Maybe you could alias the function it self:

    namespace foo
    {
     class foo
     {
     public:
      static void fun()
      {
    
      }
     };
    }
    
    int main()
    {
     void (*myfunc)() = foo::foo::fun;
    
     myfunc();
    }
    
    0 讨论(0)
  • 2021-01-11 15:42
    using ALongNameToType::ALongNameToType::Foo;
    

    if you just want to use it as Foo().

    0 讨论(0)
  • 2021-01-11 15:48

    I don't know what's ambiguous, but you can avoid all conflicts with other Foo functions like this:

    namespace ALongNameToType {
        struct ALongNameToType {
            static void Foo();   
        };
    }
    
    typedef ALongNameToType::ALongNameToType Shortname;
    
    int main() {
        Shortname::Foo();
    }
    
    0 讨论(0)
提交回复
热议问题