In a C++ project, compilation dependencies can make a software project difficult to maintain. What are some of the best practices for limiting dependencies, both within a module and across modules?
4 Answers

- 36,103
- 8
- 58
- 81
-
As would Clooney say: "What else" ??? Anyway, I find the "Abstract Interface" link out of topic in a C++ case: No exemple of a C++ interface and its derived implementation... – paercebal Oct 09 '08 at 20:10
Herb Sutter has a great treatment of this exact topic in Items 26, 27 and 28, "Minimizing Compile-time Dependencies, Parts 1, 2 and 3", in his excellent book Exceptional C++, ISBN: 0201615622.
alt text http://ak.buy.com/db_assets/prod_images/489/30611489.jpg
IMHO, this is one of the best C++ programming books available.

- 28,781
- 28
- 95
- 122
-
Can you please fix the dead link (*`Error 503 Backend unavailable, connection timeout`*)? Thanks in advance. – Wolf Sep 08 '22 at 13:18
I think you need to be very careful and considerate about this. Generally, you can limit dependencies by separating the code and using abstract interfaces (eg: function pointers or an object equivalent), but separation generally adds fragility. For example, you can call a module through a generic abstract interface to reduce the dependency on the actual object implementation, but you have to update the interface in sync with the object itself, or the code will fail at run-time.
I would say it's important to structure large projects in modules with a well-defined hierarchy, but within each module don't go overboard with breaking apart code to limit dependencies. If you're going for improved maintenance, you have to balance reducing dependencies with reducing code fragility.

- 6,808
- 1
- 22
- 34
-
You bring up that [`override`](https://en.cppreference.com/w/cpp/language/override) thing that was introduced with C++11? – Wolf Sep 08 '22 at 13:20
Also take a look at:
Large-Scale C++ Software Design (Addison-Wesley Professional Computing Series)

- 15,819
- 5
- 38
- 51