To get around the template problems, I had to write my own mini-
version of boost::function and change boost::thread to use that
instead!
Update thread.hpp and thread.cpp to accept a const ref to function
class below...
#define SunWS when compiling!
Also make sure you all the latest patches for the Sun compiler.
/////////////////////////////////////////////////////////////////////
/
// function.hpp
//
// This file includes a workaround for the Sun WorkShop compiler
which
// core dumps when trying to compile boost::function<>
/////////////////////////////////////////////////////////////////////
/
#if !defined(WU_FUNCTION_H_)
#define WU_FUNCTION_H_
#if !defined(SunWS)
#include
namespace WUC2
{
typedef boost::function0<void> Callback;
} // namespace WUC2
/////////////////////////////////////////////////////////////////////
/
#else
#include <memory>
namespace WUC2
{
#if !defined(WU_FUNCTION_HOLDER_BASE_H_)
#define WU_FUNCTION_HOLDER_BASE_H_
class function_holder_base // detail
{
public:
virtual ~function_holder_base() {}
virtual void operator()() = 0;
virtual function_holder_base* copy() const = 0;
};
#endif // !defined(WU_FUNCTION_HOLDER_BASE_H_)
template<typename F>
class function_holder : public function_holder_base // detail
{
public:
function_holder(const F& f) : m_f(f) {}
~function_holder() {}
void operator()() { m_f(); }
function_holder_base* copy() const { return new
function_holder(*this); }
private:
F m_f;
};
class function
{
public:
template<typename F> function(const F& fb) : m_fb
(new function_holder<F>(fb)) {}
function(const function& r) : m_fb( (r.m_fb)->copy
() ) {}
function() : m_fb(0) {}
function& operator=(const function& r)
{
std::auto_ptr fb(
(r.m_fb)->copy() );
if(fb.get())
{
delete m_fb;
m_fb = fb.release();
}
return *this;
}
~function() { delete m_fb; }
void operator()() { m_fb->operator()(); }
operator bool() const { return m_fb != 0; }
void clear() { delete m_fb; m_fb = 0; }
private:
function_holder_base* m_fb;
};
typedef function Callback;
} // namespace WUC2
/////////////////////////////////////////////////////////////////////
/
#endif // elif !defined(SunWS)
/////////////////////////////////////////////////////////////////////
/
#endif // !defined(WU_FUNCTION_H_)
--- In Boost-Users@yahoogroups.com, "jenny_qzhang"
wrote:
Hi, All
I am working on porting an application from MSVC to solaris
workshop(the applicatoin is using boost thread lib). I could not
locate the makefile or jam file for this compiler. Is there
anybody
did the same thing before?
If you finially made it, can you share your experience,
makefile
with me? Actually I tried to write a makefile myself, but it
reported
a lot of errors related to template parameters :(.
Thanks very much!
Qiu