Jak przejść do predykatu sortowania, który jest funkcją składową, od konstruktora
Mam następujący kod:
template <class T>
class GenericGeneticSolver
{
public:
GenericGeneticSolver(IGenticSolverHelper<T>& helper, int generationSize) : mSolverHelper(helper), mGenerationSize(generationSize)
{
mCurrentGeneration.resize(mGenerationSize);
for(int i=0;i<mGenerationSize;i++)
{
mSolverHelper.GenerateRandomSolution(mCurrentGeneration[i]);
}
sort(mCurrentGeneration.begin(),mCurrentGeneration.end(), solutionComparer);
}
void Evolve(int numberOfGenerations = 1)
{
//sort(mCurrentGeneration.begin(),mCurrentGeneration.end(), solutionComparer);
}
private :
int mGenerationSize;
vector<T> mCurrentGeneration;
IGenticSolverHelper<T>& mSolverHelper;
bool solutionComparer (T first,T second) { return (mSolverHelper.Cost(first)<mSolverHelper.Cost(second)); }
};
wconstructor
Wypełniam wektor członkami, a następnie próbuję posortować ten wektor, przekazując predykat doSort
funkcja, predykat jest funkcją składową zwaną `solutionComparer.
Niestety nie kompiluje się, kompilator nie jest zadowolony z używania wskaźnika do funkcji składowych w konstruktorze, próbowałem tej samej linii w funkcji „Evolve” i kompiluje się.
Błąd jaki otrzymuję to:
error C3867: 'GenericGeneticSolver<T>::solutionComparer': function call missing argument list; use '&GenericGeneticSolver<T>::solutionComparer' to create a pointer to member
Próbowałem zrobić to, co sugerował błąd, ale też nie skompilowałem (jakiś losowy błąd w funkcji sortowania).
Dlaczego nie mogę używać wskaźnika do funkcji składowej w konstruktorze?