Член структуры как указатель на шаблон функции с неопределенными параметрами шаблона - PullRequest
0 голосов
/ 09 апреля 2020

Описание, которое мне удалось собрать, не поддается интерпретации. Мне жаль. Мой Engli sh ограничен, и даже с отличным знанием языка я бы с трудом описал эту проблему словами. Ладно, см. Код.

Есть ли возможность объявить элемент структуры как указатель на шаблон функции без указания параметров шаблона? Вариант использования: у меня есть структура, которая содержит данные о параметрах функции. Одним из членов этой структуры является указатель на функцию, которая преобразует входящие данные из JSON в собственные данные C ++. Я хочу иметь возможность заполнить эту структуру данными в соответствии с потребностями, но не хочу писать функции для всех возможных типов. Рассмотрим следующий сценарий:

Описанная функция такова:

void modifySomeValueAndMeta(double *value, int *meta);

Для дополнительного пояснения предположим, что функция получает эти параметры, работает с некоторыми волхвами c и модифицирует их. После возврата другая функция (paramOut - для простоты опущена) будет выполнять обратное преобразование -> JSON. Вот что нужно для описания возможных параметров:

template<typename T> void (*PFN_PARAM_IN)(T* dst, json &param);

typedef struct Parameter
{
    const char *name;
    const char *type;
    const char *rawType;
    const PFN_PARAM_IN paramIn; // compiler error of course
} Parameter;

template<typename T> void myParamIn(T *dst, json &param)
{
    *dst = param.get<T>();
}

И, наконец, описание двух параметров функции:

Parameter paramDesc_getValue[] =
{
    { "value", "double *", "double", myParamIn<double> },
    { "meta", "int *", "int", myParamIn<int> }
};

Это, конечно, не компилируется, но я не хочу указывать параметр шаблона внутри объявления структуры Parameter, вместо этого я хочу иметь возможность указывать его в литерале и с разным типом для каждого элемента массива. Могу ли я как-то решить эту проблему с помощью C ++, или мне нужно изменить ее, чтобы сделать dst void * и заранее создать все возможные функции? Спасибо за просмотр, пожалуйста, подписчики c ... о, неважно;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...