I\'m trying to port an old library (that doesn\'t use namespaces as far as I can tell) to modern compilers. One of my targets can\'t tell the difference between System::TObj
I have used the following in the past while encapsulating a third party header file containing classes colliding with the code:
#ifdef Symbol
#undef Symbol
#define Symbol ThirdPartySymbol
#endif
#include <third_party_header.h>
#undef Symbol
This way, "Symbol" in the header was prefixed by ThirdParty and this was not colliding with my code.
You can do as Dib suggested, with a slight modification:
// In a wrapper header, eg: include_oldlib.h...
namespace oldlib
{
#include "oldlib.h"
};
#ifndef DONT_AUTO_INCLUDE_OLD_NAMESPACE
using namespace oldlib;
#endif
This allows you to #define the exclusion in only the files where you're getting conflicts, and use all the symbols as global symbols otherwise.
If you have the source to the library, maybe include a header file at the top of each source where that header file has only:
#define TObject TMadeUpNameObject
You could make a wrapper for all the old functions and package them up into a DLL or static library.
Try this:
namespace oldlib
{
#inclcude "oldlib.h"
};