I can't quite seem to get the right syntax for creating methods that are keyed off of subtypes (as a parameter).
Say I have:
abstract foo
abstract bar <: foo
I want to create a function that is like so:
function doStuff(::Type{foo})
end
in such a way that I can call it with "Type{bar}". i.e.: doStuff(Type{bar})
I understand that:
# Returns true:
issubtype(bar, foo)
# Returns false:
issubtype(Type{bar}, Type{foo})
And I understand why.
So... I tried to define:
function doStuff{T}(::Type{T<:foo})
end
But it tells me that: "WARNING: static parameter T does not occur in signature" (it looks like it does to me! :-)... so that's not the right answer.
Obviously I'm just thinking about the problem incorrectly... so can someone shed some light on what's up here?
Before you ask: I really do need to operate on the _types_ and not on instances of the objects themselves (which would obviously be straightforward to do).
Also: a (related) follow-on question. What is the correct/preferred way to do the following:
function createSomething{T}()
return T()
end
(obviously, this is a toy example, my real application of this is not trivial)
Is it to do:
function createSomething{T}(::Type{T})
return T()
end
?
Thanks for any help!
Derek