EDIT: Я обновил код, надеюсь, теперь более конкретный. В основном я пытался извлечь функции с помощью библиотеки dlib. Мне нужно использовать hashtable vocab в функции get_features (которая находится внутри определения класса), но я хочу назначить значения вокабу до получения функции get_features, как указано в коде, что не работает. Класс feature_extractor определяется библиотекой dlib. Я новичок в C++ и dlib, и на самом деле я не знаю, как лучше сформулировать мой вопрос.C++ вызов функции вне определения класса в функции класса
Теперь мой код имеет следующую структуру:
#include <iostream>
#include <dlib/svm_threaded.h>
using namespace std;
using namespace dlib;
/*
* Read a vocabulary file and return a map of vocab
* ex. vocab["word-1"] = 0, vocab["word+0"] = 1, vocab["word+1"] = 2
*/
std::map<std::string,int> getVocab() {
std::map<std::string, int> vocab;
std::vector<string> words;
ifstream infile("filename");
string line;
while (getline(infile, line)) {
words.push_back(line);
}
int cnt = 0;
for (auto w : words) {
vocab[w] = cnt;
cnt++;
}
return vocab;
}
class feature_extractor {
public:
typedef std::vector<std::string> sequence_type;
std::map<std::string, int> vocab = getVocab(); // if put here, it does NOT work.
void get_features (
feature_setter& set_feature,
const sequence_type& sentence,
unsigned long position
) const
{
std::map<std::string, int> vocab = getVocab(); // if put here, it works.
set_feature(vocab[sentence[position]]);
}
}
int main() {
// other stuff
structural_sequence_segmentation_trainer<feature_extractor> trainer;
sequence_segmenter<feature_extractor> segmenter = trainer.train(samples, segments);
// other stuff
}
Есть ли способ, что я могу использовать хэш-таблицу в функции get_features без вызова getVocab внутри get_features? То есть, имея переменную vocab
, она назначает значение перед функцией get_features и использует ее внутри функции.
Я попытался вызвать f1 в определении класса до f2 и присвоить хэш-таблицу переменной, но она не работает. Любая помощь будет принята с благодарностью.
Почему это проголосовало? – Rodger
@Rodger Почему вы его проголосовали? Любые хорошие рассуждения? –
Да, это хороший вопрос. Я тоже не знаю, как это сделать. Код представлен, он будет иметь четкий ответ и т. Д. – Rodger