Template for function or delegate (nothing else)

bearophile bearophileHUGS at lycos.com
Wed Feb 9 13:27:07 PST 2011


useo:

> I just have a problem with my variables.
> 
> For example... my class/template just looks like:
> 
> class Example(T) if (is(T == delegate) || is(T == function))
> {
>    T callback;
> 
>    void setCallback(T cb) {
>       callback = cb;
>    }
> 
> }
> 
> This means that I need variables like Example!(void function())
> myVariable. But is there any possibility to use variables like
> Example myVariable?

D is not the SML language, templates are just placeholders. If you don't instantiate a template, you have only a symbol. Example is only assignable to an alias (and in past, to a typedef):
alias Example Foo;


> The template declaration only defines the type of
> a callback and perhaps one method-declaration nothing else. I already
> tried Example!(void*) because delegates and functions are void
> pointers but I always get an error. I hope there is any way to do
> this.

I don't yet understand what you are trying to do.

Other notes:
- What if your T is a functor (a callable class/struct/union instance that defined opCall)?
- sizeof of a function pointer is 1 CPU word, while a delegate is 2 CPU words (and a delegate clojure has stuff on the heap too, sometimes).

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list