c++ - 如何在 rxcpp 自定义运算符中正确推断泛型

标签 c++ reactive-programming rxcpp

我创建了一个名为 validateImplementation 的自定义 rxcpp 运算符,它应该简单地采用通用可观察流,在 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;
             }
            }
           );
  };
}

但是,当尝试在 main.cpp 中使用 validateImplementation 方法时,出现以下错误:

没有匹配的成员函数来调用“validateImplementation”

注意:候选模板被忽略:无法推断模板参数“T”

你能帮我理解我做错了什么吗?

最佳答案

在 C++ 中,必须先完全解析类型,然后才能使用该函数。此外,模板参数只能从参数中推断出来,而不能从返回类型中推断出来。最后,带有模板参数的函数的定义在被调用(在 header 中)或为每个支持的类型(在 cpp 中)显式实例化时必须是可见的。

在这种情况下,我会避免显式实例化。这意味着有两种选择。

移除模板参数

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

将定义从 cpp 移动到标题更改 main.cpp 以明确类型,因为它无法推断。

o->validateImplementation<string>(s1) |

关于c++ - 如何在 rxcpp 自定义运算符中正确推断泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41877100/

相关文章:

c++使用字符串的动态数组不接受字符串

c++ - 是否有一个元组 for_each() 返回从调用的函数返回的所有值的元组?

rxjs - RX - 如何以高性能的方式使用它?

c++ - Rxcpp 中的调度器

c++ - 在 C++ 中打印一个 bool 值

c++ - 从另一个线程恢复 asio 协程

java - 在单个 map 中执行多个任务是好习惯吗

java - Rx(Java 响应式(Reactive)扩展)具有时间间隔的 Zip 运算符

java - 限制 Publisher 中的预取

c++ - RXcpp 连续从函数流式传输数据