task! with a static template method gives "null this"
Lee Braiden
leebraid at gmail.com
Sat Feb 23 15:23:56 PST 2013
Hi all,
I'm defining a template class with a static method, and adding a call to
that to a taskpool. However, when I run it, I get a "null this" error
from parallelism.d.
Here's the minimised code:
class Population(GeneType)
{
alias Population!(GeneType) ThisType;
static void breedIndividual(ThisType oldPop, ThisType newPop)
{
auto mom = oldPop.selectParent();
auto pop = oldPop.selectParent();
auto kid = mom.crossbreedFrom(pop);
// chance of mutation
if (uniform(0, MUTATION_CHANCE) == 0)
{
auto oldFitness = kid.fitness();
kid.dna.mutate();
auto newFitness = kid.fitness();
}
newPop.lifeforms_ ~= kid;
}
ThisType evolve(TaskPool p)
{
...
auto t = task!breedIndividual(this, newPop)
...
}
}
The actual error message is:
core.exception.AssertError@/usr/include/d2/4.6/std/parallelism.d(2723):
null this
There is no "this" usage that I can see, in the breedIndividual()
(static) method... EXCEPT maybe for the fact that ThisType depends on the
template class expansion. But that's all expanded at compile-time, and
doesn't matter, right?
So I'm not sure how to solve this. My first thought was to move
breedIndividual out of the class, but it does depend on ThisType, as
defined in the class template.
Am I right that this is what's causing the "null this" error? If so,
what can I do to fix it?
Thanks,
--
Lee
More information about the Digitalmars-d-learn
mailing list