Comments (2)
We are less concerned with low-level issues, such as naming conventions and indentation style. However, no topic that can help a programmer is out of bounds.
In my opinion the indentation style that one chooses regarding namespaces, largely effects the answer for how many nested namespaces would be deemed as inappropriate. I say this because in the scenario where we use as much indentation as possible (assuming a tab width of 4 spaces), it suddenly becomes apparent that things are going to get messy pretty fast.
Example 3A:
This approach is an example using as much indentation as possible.
One benefit here is that it is clear which members are part of each namespace.
One drawback here is that this pattern implies there is a much stricter upper restriction on the amount of nested namespaces deemed appropriate, (since meeting the 80 or 120 horizontal character limit employed by most programmers suddenly becomes incredibly easy at this level of indentation).
namespace a {
void foo();
namespace b {
void foo();
namespace c {
void foo();
namespace d {
void foo();
} // namespace d
} // namespace c
} // namespace b
} // namespace a
Example 3B:
This approach is an example using indented members without indentation for subsequent nested namespaces.
One benefit here is that we are no longer limited by indentation at all for the amount of nested namespaces deemed appropriate.
One drawback here is that it could become difficult to distinguish which namespace you are currently inside when you are dealing with a lot of code, (but this shows the importance of trailing comments after a namespace).
namespace a {
void foo();
namespace b {
void foo();
namespace c {
void foo();
namespace d {
void foo();
} // namespace d
} // namespace c
} // namespace b
} // namespace a
Example 3C:
This approach is an example using indented subsequent nested namespaces without indentation for namespace members.
One benefit here is that we can still easily distinguish namespace members and their respective namespaces.
One drawback here is that it is still restrictive to the amount of nested namespaces, although this is not as restrictive as Example 3A.
namespace a {
void foo();
namespace b {
void foo();
namespace c {
void foo();
namespace d {
void foo();
} // namespace d
} // namespace c
} // namespace b
} // namespace a
Example 3D:
This approach is an example using no indentation.
I don't see any benefits that this has over Example 3B.
Perhaps some people are a fan of no indentation though?
namespace a {
void foo();
namespace b {
void foo();
namespace c {
void foo();
namespace d {
void foo();
} // namespace d
} // namespace c
} // namespace b
} // namespace a
What is my personal favorite?
I think Example 3B is the clear winner for me. This is of course assuming that we are ending all of our namespaces with trailing comments for extra clarity. But I can totally see reasons for people still wanting to put restrictions on the amount of nested namespaces deemed appropriate, and for people preferring different indentation styles which may implicitly effect that too. Interested to hear your thoughts!
from cppcoreguidelines.
Editors call:
For nesting: We don't have a hard recommendation for namespace nesting. We might have a guideline for this later but are not ready to add one now.
For formatting: We don't recommend stylistic conventions for whitespace formatting. However, note that you can declare a deeply nested namespace by writing namespace a::b::c::d
.
from cppcoreguidelines.
Related Issues (20)
- Sss
- Practice HOT 1
- #include HOT 1
- How to refer to the guidelines, bibtex preferred? HOT 3
- I.2: Avoid non-const global variables, but exempt "file scope" from this rule HOT 2
- C++ Core Guidelines Markdown to HTML HOT 1
- Why isn't the exception safety mentioned in the Reason of R.22? HOT 4
- C++ Core Guidelines Markdown explicit anchor links not working (updated the 20/05/2024)
- Doesn't the title of ES.3 break that very guideline itself? HOT 2
- Section E.27 HOT 1
- Ceil Function in Cpp HOT 3
- Recommend against using RAII only for release functions that can fail, including all IO HOT 1
- Clarify ES.23: Prefer the {}-initializer syntax HOT 1
- Should ES.23 mention that ()-initialization is likely to be preferrable when dealing with containers containing types initializable from the container itself HOT 3
- Exception to ES.63 for base type without any data member HOT 1
- Discourage implicit casting from/to void pointer HOT 1
- Should SF.7 avoid to limit its applicability to when the directive is at global scope?
- the links in I: Interfaces are all broken HOT 1
- gsl::span UB if used over containers of non-implicit lifetime types? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cppcoreguidelines.