It is much more efficient if you can show the problem in minimal code. :)
Here is minimal code that demonstrates the problem:
import std.container;
struct Results(O, I)
{}
bool compareResults(O, I)(Results!(O, I) lhs, Results!(O, I) rhs)
{
return lhs == rhs;
}
alias ProgramResultsQueue(O,I) =
BinaryHeap!(Array!(Results!(O,I)), compareResults);
class ProgramOptimizer(O, I)
{
ProgramResultsQueue!(O,I) programResultsQ =
heapify!(compareResults,
Array!(Results!(O,I)))(Array!(Results!(O,I)),
0);
}
void main()
{
auto p = new ProgramOptimizer!(int, float);
}
On 09/21/2015 04:37 PM, Enjoys Math wrote:
>
> I've got:
> alias ProgramResultsQueue(O,I) = BinaryHeap!(Array!(Results!(O,I)),
> compareResults);
>
> outside the class ProgramOptimizer. Inside the class I have:
>
> ProgramResultsQueue!(O,I) programResultsQ = heapify!(compareResults,
> Array!(Results!(O,I)))(Array!(Results!(O,I)), 0);
>
> at class scope (not in a function or ctor).
You cannot execute code inside the body of a class other than simple
initialization of members when it's possible to do so at compile time.
In general, members are initialized in the constructor.
> Error:
> cannot pass type Array!(Results(int,float)) as a function argument.
You are passing 'types' but heapify's function parameter takes a storage
and an initial size:
http://dlang.org/phobos/std_container_binaryheap.html#.heapify
(Types cannot be function arguments anyway.)
> When I add () to Array!(Results!(O,I)) I get some weird error in the
> library that can't be helped either.
>
> Please guide me!
The following at least compiles:
import std.container;
struct Results(O, I)
{}
bool compareResults(O, I)(Results!(O, I) lhs, Results!(O, I) rhs)
{
return lhs == rhs;
}
alias ProgramResultsQueue(O,I) =
BinaryHeap!(Array!(Results!(O,I)), compareResults);
class ProgramOptimizer(O, I)
{
Array!(Results!(O, I)) store;
ProgramResultsQueue!(O,I) programResultsQ;
this()
{
programResultsQ =
heapify!(compareResults, Array!(Results!(O,I)))(store, 100);
}
}
void main()
{
auto p = new ProgramOptimizer!(int, float);
}
Ali