Я хочу, чтобы удаленный процесс вызывал шаблон C++-функцию с помощью бережливости, поддерживает ли это помощь?Поддерживает ли поддерживающий IDL общие типы в C++?
Если да, то как я могу написать файл описания бережливости в этом случае?
Я хочу, чтобы удаленный процесс вызывал шаблон C++-функцию с помощью бережливости, поддерживает ли это помощь?Поддерживает ли поддерживающий IDL общие типы в C++?
Если да, то как я могу написать файл описания бережливости в этом случае?
Шаблоны в C++ создаются с использованием типов во время компиляции, поэтому нет возможности предоставить пользователю MyOwnType
во время выполнения. Это потребует некоторой странной перекомпиляции и перезагрузки частей кода во время выполнения кода ...
Так вот почему он обычно не поддерживается, чтобы предоставить пользователю возможность создавать шаблоны на стороне сервера.
Дальнейший режим - Thrift был разработан для поддержки межплатформенной связи. Представьте, что PHP-клиент пытается создать экземпляр некоторого C++-шаблона с классом, определенным в PHP ...
Также - пожалуйста, помните о проблемах безопасности - передайте любой код, который будет выполняться на стороне сервера (создание экземпляра на самом деле является формой выполнения кода) без проверка - всего лишь плохая идея.
В Thrift вы можете использовать общие vector
или map
для определения конкретных типов, но функции должны быть конкретными, а не универсальными.
Вы можете определить столько функций, сколько вам может понадобиться, со всеми типами, которые вы хотите поддерживать. Вы можете подумать даже о создании какого-либо скрипта, генерирующего Trrift IDL из списка типов, которые вы хотите поддерживать.
Или вы могли бы использовать бережливости union
типа или optional
поля для создания «вариант» Тип:
union Arg {
1: optional Type1 t1; // not sure if union works well enough...
2: optional Type2 t2;
}
void genericFun(1: Arg a);
ИМХО: Это то, что кажется, что вы хотите создать «делать все» тип сервера, который редко хорошая идея - выберите то, что ваш сервер действительно имеет, чтобы сделать и сделать это хорошо.
Функции шаблона не подлежат вызову. Это всего лишь способ вычеркнуть код. Вам нужно будет явно создать шаблонную функцию на C++ и затем экспортировать ее. –
@RichardCritten, разумно, но при написании фреймворка с использованием экономии для использования rpc я хочу предоставить функциональность шаблона и предоставить им экземпляр для пользователей. – xunzhang
Создание экземпляра шаблона происходит во время компиляции в C++. Поэтому трудно понять, как это будет работать. –