Описание, которое мне удалось собрать, не поддается интерпретации. Мне жаль. Мой Engli sh ограничен, и даже с отличным знанием языка я бы с трудом описал эту проблему словами. Ладно, см. Код.
Есть ли возможность объявить элемент структуры как указатель на шаблон функции без указания параметров шаблона? Вариант использования: у меня есть структура, которая содержит данные о параметрах функции. Одним из членов этой структуры является указатель на функцию, которая преобразует входящие данные из JSON в собственные данные C ++. Я хочу иметь возможность заполнить эту структуру данными в соответствии с потребностями, но не хочу писать функции для всех возможных типов. Рассмотрим следующий сценарий:
Описанная функция такова:
void modifySomeValueAndMeta(double *value, int *meta);
Для дополнительного пояснения предположим, что функция получает эти параметры, работает с некоторыми волхвами c и модифицирует их. После возврата другая функция (paramOut - для простоты опущена) будет выполнять обратное преобразование -> JSON. Вот что нужно для описания возможных параметров:
template<typename T> void (*PFN_PARAM_IN)(T* dst, json ¶m);
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 ¶m)
{
*dst = param.get<T>();
}
И, наконец, описание двух параметров функции:
Parameter paramDesc_getValue[] =
{
{ "value", "double *", "double", myParamIn<double> },
{ "meta", "int *", "int", myParamIn<int> }
};
Это, конечно, не компилируется, но я не хочу указывать параметр шаблона внутри объявления структуры Parameter, вместо этого я хочу иметь возможность указывать его в литерале и с разным типом для каждого элемента массива. Могу ли я как-то решить эту проблему с помощью C ++, или мне нужно изменить ее, чтобы сделать dst void * и заранее создать все возможные функции? Спасибо за просмотр, пожалуйста, подписчики c ... о, неважно;)