C++ Boost

Serialization

BOOST_STRONG_TYPEDEF


Motivation

typedef creates an alias for an existing type. It does not create a new type that can be used for matching either function or template parameters. This can be shown by trying to compile the following example.

typedef int a;
void f(int x);  // (1) function to handle simple integers
void f(a x);    // (2) special function to handle integers of type a 
int main(){
    int x = 1;
    a y;
    y = x;      // other operations permitted as a is converted as necessary
    f(x);       // chooses (1)
    f(y);       // chooses (2)
}
Since typedef doesn't create a new type, this program can't compile to code that implements its obvious intention.

Usage of BOOST_STRONG_TYPEDEF addresses this.



#include <boost/serialization/strong_typedef.hpp>


BOOST_STRONG_TYPEDEF(int, a)
void f(int x);  // (1) function to handle simple integers
void f(a x);    // (2) special function to handle integers of type a 
int main(){
    int x = 1;
    a y;
    y = x;      // other operations permitted as a is converted as necessary
    f(x);       // chooses (1)
    f(y);       // chooses (2)
}
The program will now compile and run as expected.

Usage

Syntax of BOOST_STRONG_TYPEDEF has been designed to be similar to the standard typedef. So

BOOST_STRONG_TYPEDEF(primitive type, name)
will create a new type "name" which will be substitutable for the original type but still of distinct type.

Implemenation

BOOST_STRONG_TYPEDEF is a macro which generates a class named "name" which wraps an instance of its primitive type and provides appropriate conversion operators in order to make the new type substitutable for the one that it wraps.

© Copyright Robert Ramey 2002-2004. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)