There will be.
Am crammed with the very last bits of XSTL - CD,
index, final page proofs.
After that, things will be more 'Active'. (Get
it?!?! <g>)
Any comments on this?
Adi Shavit wrote:
Hi,
I wrote a little proof-of-concept shim for
doing this.
It seems to work as expected, while preventing naive
misuse.
template <class T>
class
raw_assignment_shim
{
public:
operator
T::resource_type*() // conversion
op
{ return &res_; }
~raw_assignment_shim() // dtor
{
// do some checks
here...
ref_.set(res_,
false);
}
private:
friend raw_assignment_shim<T>
make_raw_assignment_shim(T& ref);
raw_assignment_shim(T& ref): // private
ctor
res_(ref.get()),
ref_(ref)
{}
T::resource_type
operator*(); // not implemented. Prevents
de-ref.
private:
T::resource_type
res_;
T& ref_;
};
template <class
T>
raw_assignment_shim<T> make_raw_assignment_shim(T&
ref)
{ return raw_assignment_shim<T>(ref);
}
///////////////////////////////////////////////////////////////////////////////////
bool
SequenceProcessor::createFilterGraph(string filename)
{
using winstl::a2w;
// Create a source filter specified by
filename
ref_ptr<IBaseFilter>
pSource;
if(FAILED(pGraph->AddSourceFilter(a2w(filename),0,
make_raw_assignment_shim(pSource))))
{
::MessageBox( NULL, "Unable to create
source
filter",
"Error", MB_OK | MB_ICONINFORMATION );
return 0;
}
/* // original
code...
// Create a source filter specified by
filename
ref_ptr<IBaseFilter>
pSource;
{
IBaseFilter*
ppSource= NULL;
if(FAILED(pGraph->AddSourceFilter(a2w(filename),0,&ppSource)))
{
::MessageBox( NULL,
"Unable to create source
filter",
"Error", MB_OK | MB_ICONINFORMATION
);
return
0;
}
pSource.set(ppSource, false);
}
*/
...
Of course, the names can
be changed, and some refinements should probably be added.
Such as limit
it only for initializing an empty (NULL) ref_ptr<>, exceptions
etc.
What do you
think?
Adi