Код шаблона для вызова идентичных API C++ из разных пространств имен.C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Код шаблона для вызова идентичных API C++ из разных пространств имен.

Сообщение Гость »


Kubernetes имеет две очень похожие версии CRI API (v1 и v1alpha), определенные здесь:

https://github.com/kubernetes/cri-api/b ... /api.proto https://github.com/kubernetes/cri-api/b ... /api.proto Они преобразуются с помощью protoc в заголовки C++, которые клиенты используют для удаленных вызовов API. Некоторые кластеры Kubernetes поддерживают только v1alpha, некоторые только v1, а некоторые и то, и другое.

Код клиента выглядит следующим образом:

auto stub = runtime::v1::RuntimeService::NewStub(unixSockPath); runtime::v1::ListContainersRequest req; runtime::v1::ListContainersRequest соответственно; заглушка->ListContainers(req, &res); или вот так, в зависимости от того, какая версия поддерживается сервером:

auto stub = runtime::v1alpha::RuntimeService::NewStub(unixSockPath); runtime::v1alpha::ListContainersRequest req; runtime::v1alpha::ListContainersRequest соответственно; заглушка->ListContainers(req, &res); (изменились только названия типов.)

Поэтому клиентам необходимо сначала попробовать использовать v1 и вернуться к v1alpha, если v1 не поддерживается.

Есть ли способ написать функцию шаблона, которая выдает вышеуказанные запросы и использует пространство имен (runtime::v1, runtime::v1alpha) в качестве параметра шаблона ? Это позволит писать такой код:

std::list listContainers() { пытаться { если (g_useV1) return __listContainers(); } catch (const not_supported &ex) { g_useV1 = ложь; } return __listContainers(); } Или передача всех используемых имен типов (RuntimeService::NewStub, ListContainerRequest и т. д.) в качестве параметров шаблона является единственным вариантом?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»