My approach to software engineering is far more pragmatic than it is
theoretical, and I've no doubt that this column will reflect that.
(That's double-speak for "I don't know what I'm talking about half the
time"!) It's my belief that all languages are imperfect, and that C++
is
no exception.
Where C++ has the advantage over other languages is in its support for
close-to-the bone efficiency and
at the same time supporting the expression of high-level concepts. It
also has its own built-in self-repair mechanism in its powerful (though
still imperfect) templates mechanism.
So as well as providing you with some useful efficient code, the intent
in this column is to share with you the various pros and cons of the
solutions presented in the hope that you may find some of it
illuminating. (There's not much point in having a column if you can't
achieve that every now and then, one would think!)
Footprints in the Butter: Part II In his previous installment, Matthew focused on code bloat in source code. This month, he looks at object code size.
Flexible C++ #12: Imperfect enums, Part 2: Forward Declarations This second part of the Imperfect Enums series looks at the issue of the forward declaration of enumerations. Why would one ever want to do that, I hear you cry? Certainly it's not a common need. But I have encountered situations where it's required, one of which we'll discuss later.
Flexible C++ #11: Imperfect enums, part 1: Declarations, Definitions, and Namespace Leakage Welcome to a series on enumerations in C and C++, in which I cover their uses, good practices for managing them, and two imperfections in the way the language handles them. In this first installment, I cover the overview of enumerations, and examine the first imperfection: the leakage of enumeration symbol names into the surrounding namespace.
Flexible C++ #8: Union Casts Considered Harmful, but Necessary Unions in C and C++ are aggregate quantities like structs, except that each element of the union has offset 0, and the total size of the union is only as large as is required to hold its largest member [1]. Only one member of a union may be "active" at a time.
Flexible C++ #6: Flexible Implementations Without Using Directives It is widely accepted that using directives are an unacceptable part of the public interface of library code. This is because a using directive indiscriminately makes visible all symbols within the referenced namespace from the point of directive declaration, raising the potential for symbol clash (which is what namespaces were created to circumvent).
Flexible C++ #5: Friendly Templates Matthew looks at the subject of friendly templates from the perspective of granting friendship from a template to one of the template's parameterizing types.
Flexible C++ #4: Efficient Integer To String Conversions This is the final installment in the integer-to-string series. The previous two installments and the original article described different approaches to the efficient conversion of integers into strings. This time arround, I continue with the "Flexible C++" philosophy, and consider one last variation.
Become a Better Build Detective: Effective Techniques for Debugging Makefiles This Webcast will uncover some of the most common Makefile errors and provide specific, proven techniques for fixing them. If command or syntax errors have been a mystery for you, this is a discussion you won't want to miss. Event Date: Wednesday, May 28, 2008
Amp Up Your Continuous Integration Builds Amp up your continuous integration build process by increasing the frequency of your build loop. Learn from experts how to create a build that can quickly adapt to source code changes and drive down build times from hours to minutes. Event Date: Thursday, May 22, 2008
In this volume of Best of BYTE, we explore the emergence of some heuristic algorithms. Although we have only scratched the surface of this intriguing subject, we hope we've suggested the potential of the synthesis of heuristics and algorithms.