Re: Template<void>
Allan W wrote:
The name "callbackbase" is used for the base class,
just to factor out the non-template parts. Other than that
it is never used. I wondered if we couldn't use an
otherwise-unused version of the template instead. Is this
legal (or could it be made legal with relatively few changes)?
(Untested code):
[begin]
template < class T >
class callback;
template<>
class callback<void> {
public:
virtual void operator()() const { };
virtual ~callback() = 0;
};
callback<void>::~callback() { }
template < class T >
class callback : public callback<void> {
public:
typedef void (T::*Func)();
callback( T& t, Func func ) : object(&t), f(func) { }
void operator()() const { (object->*f)(); }
private:
T* object;
Func f;
};
[end]
Looks perfectly legal to me. There's nothing stopping you deriving the
general template from an explicit or partial specialization. The
principle of least surprise is the only thing against it.
Tom
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]