C ++: создать список подходящих функторов между стартапами - PullRequest
0 голосов
/ 02 марта 2010

Я создаю что-то вроде списка функторов (указателей на функции). Затем я записываю их в двоичном виде в файл. Проблема в том, что функтор - это простая функция указатель. (поправьте меня, если я ошибаюсь.) Но адрес функции отличается от одного запуска к другому.

Итак, вопрос - есть ли способ создать список функторов, которые будут актуальны все время?

Ответы [ 3 ]

2 голосов
/ 02 марта 2010

Я бы порекомендовал какую-то парную структуру данных с идентификатором на одной стороне и указателем функции на другой. Если их достаточно, что-то вроде карты:

typedef void (*fptr_t)(); // or whatever your function pointer type is
std::map<std::string, fptr_t> fptr_map;

Ваше приложение должно построить эту карту, когда она будет нужна, и сохранить результат в кеше. Затем, когда вы «записываете» указатели функций в файл, вы должны вместо этого писать уникальные ключи std :: string. Когда приложение «читает» указатели на функции, оно считывает ключи и сопоставляет их с указателями на функции для этого вызова программы.

2 голосов
/ 02 марта 2010

Одним из возможных решений, как упоминает @fbrereto, является маркировка различных функторов с помощью уникального идентификатора (целое число, строка, uuid и т. Д.), Который не зависит от адресов в каждом конкретном процессе, и сохранение этих ключей в файле. , Затем вы можете использовать что-то Factory Design Pattern для создания функторов по требованию при чтении файла.

1 голос
/ 02 марта 2010

Да, указатель функции - это просто адрес. Вы не можете полагаться на это. Вместо этого вы можете создать массив функторов и сохранить индексы функторов в файле. или вы можете создавать хеш-таблицу и ссылочные функторы по имени.

...