У меня есть шаблонная структура, в которой есть метод, который (наряду с другими параметрами) принимает эти шаблонные параметры.
template<class... Types>
struct Observer
{
void subscribe(const std::string& id, Types... args)
{
// store id somehow
data = std::make_tuple(args...);
}
std::tuple<Types...> data;
};
Я хочу сделать все шаблонные аргументы необязательными.Чтобы это выглядело так:
Observer<float, int> observer;
observer.subscribe("id1", 3.14, 4);
observer.subscribe("id2", 0.707); // this doesn't work!
observer.subscribe("id3"); // this doesn't work!
Насколько я знаю, нет прямого пути?Но, возможно, кто-то знает обходной путь или хитрость.
В идеале я хотел бы указать свои собственные значения по умолчанию.Может быть так:
enum class SomeEnum { Val1, Val2 };
Observer<float, SomeEnum, 0.f, SomeEnum::Val1> observer;
observer.subscribe("id1", 3.14);
Вот ПРИМЕР ЖИВОГО .