Я работаю над своим первым проектом на C ++ и использую инфраструктуру JUCE. (Я знаю некоторые основы c Java, в противном случае.)
В проекте мне нужно преобразовать пару целых чисел в другую пару целых чисел, в зависимости от отображения, считанного из файла. Класс JUCE HashMap казался идеальным для этого:
https://docs.juce.com/master/classHashMap.html
Я создал простой класс сумок "TwoInts" для хранения пар целых чисел, которые будут ключами и значения, и по понятным причинам мне нужно предоставить собственную функцию ha sh для этого класса:
Типы объектов ключа и значения задаются в качестве параметров шаблона. Вы также можете указать класс для предоставления функции ha sh, которая преобразует значение ключа в хешированное целое число. Этот класс должен иметь форму:
struct MyHashGenerator
{
int generateHash (MyKeyType key, int upperLimit) const
{
// The function must return a value 0 <= x < upperLimit
return someFunctionOfMyKeyType (key) % upperLimit;
}
};
Я создал этот класс следующим образом:
struct MyHashGenerator
{
int generateHash (TwoInts key, int upperLimit) const
{
String toHash;
toHash+=String(key.getFirst());
toHash+=STring(key.getSecond());
return juce::DefaultHashFunctions::generateHash (toHash,upperLimit);
}
};
Теперь у меня возникают проблемы с выяснением синтаксиса объявления и хотя инициализируем HashMaps.
В документации шаблон показан как
template<typename KeyType, typename ValueType, class HashFunctionType = DefaultHashFunctions, class TypeOfCriticalSectionToUse = DummyCriticalSection>
, а конструктор -
HashMap (int numberOfSlots=defaultHashTableSize, HashFunctionType hashFunction=HashFunctionType())
Лучше всего было объявить вот так :
HashMap<TwoInts,TwoInts,MyHashGenerator> translator;
и затем инициализируйте так:
:translator(1152, MyHashGenerator::generateHash())
Но это полуобразованное предположение приводит к ошибке. (нет соответствующей функции для вызова 'RelayerMApper: MyHashGenerator :: generateHa sh ()')
Может кто-то показать / объяснить синтаксис, который я должен использовать здесь?
Большое спасибо за любая помощь! Я хотел бы дать пару долларов на сумму Bitcoin Ca sh тому, кто сможет мне здесь помочь, просто чтобы показать, что я ценю ваше время и усилия.
Вот весь заголовочный файл, который я собираюсь Для справки:
#pragma once
#include "JuceHeader.h"
class RelayerMapper
{
public:
class TwoInts
{
public:
TwoInts(){}
TwoInts(int a, int b)
{
first=a;
second=b;
}
int getFirst()
{
return first;
}
int getSecond()
{
return second;
}
void setFirst(int in)
{
first=in;
}
void setSecond(int in)
{
second=in;
}
private:
int first, second;
};
struct MyHashGenerator
{
int generateHash (TwoInts key, int upperLimit) const
{
String toHash;
toHash+=String(key.getFirst());
toHash+=String(key.getSecond());
return juce::DefaultHashFunctions::generateHash (toHash,upperLimit);
}
};
RelayerMapper()
: dtMidiToCoords(1152, MyHashGenerator::generateHash()),
coordsToDtMidi(1872, MyHashGenerator::generateHash()),
axisToCoords(98)
{}
TwoInts MapDtMidiToCoords(TwoInts twoIntsIn, HashMap<TwoInts,TwoInts> hashmap)
{
return hashmap.getReference(twoIntsIn);
}
private:
HashMap<TwoInts,TwoInts,MyHashGenerator> dtMidiToCoords;
HashMap<TwoInts,TwoInts,MyHashGenerator> coordsToDtMidi;
HashMap<int,TwoInts> axisToCoords;
};