Я создал собственный оператор 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'
Можете ли вы помочь мне понять, что я делаю неправильно?
В C ++ типы должны быть полностью разрешены, прежде чем можно будет использовать функцию. Кроме того, параметры шаблона могут быть выведены только из параметров, а не из типа возвращаемого значения. Наконец, определение функции с параметрами шаблона должно быть видимым, когда она вызывается (в заголовке) или явно создается для каждого поддерживаемого типа (в cpp).
В этом случае я бы избегал явных реализаций. Это означает, что есть два варианта.
удалить параметр шаблона
function<observable<string>(observable<string>)> validateImplementation(SimpleInterface component);
переместить определение из cpp в заголовок а также Измените main.cpp, чтобы он был явным о типе, так как он не может быть выведен.
o->validateImplementation<string>(s1) |
Других решений пока нет …