LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

известен, но некоторые из них опциональные (могут быть не заданы)

В C++ опциональные аргументы можно передавать несколькими способами. Я бы рекомендовал обратить внимание на два:
1. Уникальность функции определяется не только ее именем, но и количеством аргументов. То есть ты можешь задавать разную имплементацию в зависимости от количества аргументов.
2. Параметрам функции можно задать дефолтные значения.

#include <iostream>

void fn(std::string str, int i=0)
{
        std::cout << "called fn('" << str << "', " << i << ")" << std::endl;
}

void fn()
{
        std::cout << "called fn()" << std::endl;
}

int main()
{
        fn("test", 5);
        fn("test");
        fn();

        return 0;
}

$ g++ test.cpp && ./a.out
called fn('test', 5)                                                                                                                                                             
called fn('test', 0)
called fn()


скажи сейчас :) Вызов различных функций хочется реализовать через единый «универсальный» интерфейс

Давай сначала решим вопрос передачи произвольных наборов данных.

То, что тебе нужно, называется сериализация. Дальше нужно выбрать формат/протокол. Сейчас популярен JSON. Раньше был XML. Есть другие, например Google Protocol Buffers. Как видишь, уже давно есть множество реализаций сериализации/десериализации под типовые форматы. Ссылки на примеры я дал, но лучше погуглить побольше по ключевым словам, например, C++ object serialization json. Валидаторы также имеются, например для JSON.

Что до интерфейса - я так и не понял архитектуру.

Если это микросервисы, то, например, REST может быть вариантом. Но у REST свои недостатки; например, тот, что заточен под работу с объектами - создание, модификация, и т. п., а если нужно что-то шире, то приходится извращаться. Если у тебя произвольные функции, то гугли на тему RPC; вариантов много.
Посмотри вот это

Ключевое: и для вызова методов на другом компоненте, и для сериализации данных уже давно есть готовые библиотеки, и свой велосипед писать не нужно.

Но если у тебя весь проект компилится как единое целое, то, повторюсь, вызов функций лучше делать средствами C++ как я описал в начале поста.

Исходная версия Kroz, :

известен, но некоторые из них опциональные (могут быть не заданы)

Опциональные аргументы можно передавать несколькими способами. Я бы рекомендовал обратить внимание на два:
1. Уникальность функции определяется не только ее именем, но и количеством аргументов. То есть ты можешь задавать разную имплементацию в зависимости от количества аргументов.
2. Параметрам функции можно задать дефолтные значения.

#include <iostream>

void fn(std::string str, int i=0)
{
        std::cout << "called fn('" << str << "', " << i << ")" << std::endl;
}

void fn()
{
        std::cout << "called fn()" << std::endl;
}

int main()
{
        fn("test", 5);
        fn("test");
        fn();

        return 0;
}

$ g++ test.cpp && ./a.out
called fn('test', 5)                                                                                                                                                             
called fn('test', 0)
called fn()


скажи сейчас :) Вызов различных функций хочется реализовать через единый «универсальный» интерфейс

Давай сначала решим вопрос передачи произвольных наборов данных.

То, что тебе нужно, называется сериализация. Дальше нужно выбрать формат/протокол. Сейчас популярен JSON. Раньше был XML. Есть другие, например Google Protocol Buffers. Как видишь, уже давно есть множество реализаций сериализации/десериализации под типовые форматы. Ссылки на примеры я дал, но лучше погуглить побольше по ключевым словам, например, C++ object serialization json. Валидаторы также имеются, например для JSON.

Что до интерфейса - я так и не понял архитектуру.

Если это микросервисы, то, например, REST может быть вариантом. Но у REST свои недостатки; например, тот, что заточен под работу с объектами - создание, модификация, и т. п., а если нужно что-то шире, то приходится извращаться. Если у тебя произвольные функции, то гугли на тему RPC; вариантов много.
Посмотри вот это

Ключевое: и для вызова методов на другом компоненте, и для сериализации данных уже давно есть готовые библиотеки, и свой велосипед писать не нужно.

Но если у тебя весь проект компилится как единое целое, то, повторюсь, вызов функций лучше делать средствами C++ как я описал в начале поста.