:: Without a Namespace

What namespace will a class have if no namespace is defined

It's in the global namespace and can be referenced like this:

var x = new global::test();

explicitly refer to a class without a namespace in C#

C# also has a global (or unnamed) namespace - you can use global:: to access your class:

global::Environment 

See more on MSDN. Also see the :: operator.

You can create an alias for it as well:

using myEnv = global::Environment;
using sysEnv = System.Environment;

C++: Instantiate object with no namespace

First, and potentially safest, you can explicitly qualify look up in the global scope by prefixing a name with the unary scope operator :::

::classFromB foo(/*...*/);
::globalFuncFromB( foo, &::globalVarFromB ); // Obviously this gets rather tedious.

Second, assuming no using directives (using namespace A;) or declarations (using conflictsWithB = A::className), or other declarations, produce a conflict, you can generally rely on unqualified look up:

classFromB foo(/*...*/);
globalFuncFromB( foo, &globalVarFromB );

Finally, you can wrap the entire contents of an included file in a namespace:

namespace B {
#include "B.hpp"
}

This has numerous potential problems, particularly if any declarations in B.hpp are assumed to be or actually defined either in the header itself or elsewhere (implementation B.cpp?) in global scope. Not the best idea, but sometimes useful. Be very cautious if you consider this approach.

Calling function in a namespace without qualification

According to ISO C++14 standard, at §3.4.2:

When the postfix-expression in a function call is an unqualified-id, other namespaces not considered during the usual unqualified lookup may be searched, and in those namespaces, namespace-scope friend function or function template declarations not otherwise visible may be found. These modifications to the search depend on the types of the arguments (and for template template arguments, the namespace of the template argument).

And following:

For each argument type T in the function call, there is a set of zero or more associated namespaces and a set of zero or more associated classes to be considered. The sets of namespaces and classes is determined entirely by the types of the function arguments..

If T is a class type (including unions), its associated classes are: the class itself; the class of which it is a member, if any; and its direct and indirect base classes. Its associated namespaces are the innermost enclosing namespaces of its associated classes.

Actually you can even prevent this from happening by enclosing the function name:

(bar)(a); // doens't compile

while

(B::bar)(a); // does compile

Mind also that this applies only to the innermost namespace, which means that in the following situation you need to qualify the namespace:

namespace B {
namespace C {
struct A {};
}

void bar(const C::A& a) { ... }
}

Named route without the namespace prefix

Pretty sure you have to do this outside of the namespace:

get 'api/v1/me', to: 'api/v1/resource_owner_info#me', as: 'resource_owner_info', defaults: { format: :json }

If you have a lot of routes like that:

scope path: :api, module: :api, defaults: { format: :json } do
scope path: :v1, module: :v1 do
get 'me', to: 'resource_owner_info#me', as: 'resource_owner_info'
# ...
end
end

Both will generate this

Prefix              Verb  URI Pattern            Controller#Action
resource_owner_info GET /api/v1/me(.:format) api/v1/resource_owner_info#me {:format=>:json}

https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Scoping.html

how to load Laravel 6 model classes without namespace

I do not know why you want to discard using namespaces, If you want to NOT use namespaces for your models, edit your composer.json like below

"autoload": {    "psr-4": {        "App\\": "app/"    },    "classmap": [        "database/seeds",        "database/factories",        "models"    ]},


Related Topics



Leave a reply



Submit