История изменений
Исправление 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++ как я описал в начале поста.