Как правильно вывести обобщение в пользовательском операторе rxcpp

Я создал собственный оператор rxcpp под названием validateImplementation это должно просто взять общий наблюдаемый поток, сделать некоторые проверки на SimpleInterface и либо продолжить, либо завершить поток на основе определенного условия (в моем случае это условие whatsMyId)

https://github.com/cipriancaba/rxcpp-examples/blob/master/src/SimpleOperators.cpp

template <class T> function<observable<T>(observable<T>)> SimpleOperators::validateImplementation(SimpleInterface component) {
return [&](observable<T> $str) {
return $str |
filter([&](const T item) {
if (component.whatsMyId() == "1") {
return true;
} else {
return false;
}
}
);
};
}

Тем не менее, при попытке использовать validateImplementation метод в main.cppЯ получаю следующие ошибки:

no matching member function for call to 'validateImplementation'

note: candidate template ignored: couldn't infer template argument 'T'

Можете ли вы помочь мне понять, что я делаю неправильно?

0

Решение

В C ++ типы должны быть полностью разрешены, прежде чем можно будет использовать функцию. Кроме того, параметры шаблона могут быть выведены только из параметров, а не из типа возвращаемого значения. Наконец, определение функции с параметрами шаблона должно быть видимым, когда она вызывается (в заголовке) или явно создается для каждого поддерживаемого типа (в cpp).

В этом случае я бы избегал явных реализаций. Это означает, что есть два варианта.

удалить параметр шаблона

function<observable<string>(observable<string>)> validateImplementation(SimpleInterface component);

переместить определение из cpp в заголовок а также Измените main.cpp, чтобы он был явным о типе, так как он не может быть выведен.

o->validateImplementation<string>(s1) |
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]