如何在 rxcpp 自定义运算符中正确推断泛型
How to properly infer a generic in a rxcpp custom operator
我创建了一个名为 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
方法时,我收到以下错误:
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) |
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 泛型lambda和一元+运算符
- 重载泛型类型的模板类时检查运算符=时的自赋值
- 结构的泛型比较运算符
- 泛型运算符== 用于非 pod 对象
- 在泛型编程C++重载增量运算符
- 后缀运算符链表泛型节点迭代器
- 如何确保 "<<" 运算符适用于模板化 ADT 定义中的任何泛型类型?
- 如何在 rxcpp 自定义运算符中正确推断泛型
- 如何在main中重载运算符>泛型类.cpp
- 使用泛型运算符 >* 作为右值
- c++泛型运算符重载
- 运算符<<函数在转储成员函数方面的泛型实现
- C++中的模板、Java 中的泛型和 >> 位移运算符
- 泛型继承和重载运算符+
- 如何使用泛型模板重载类的运算符
- 泛型类中的赋值运算符.C++
- C++泛型输出运算符重载
- 在存在泛型构造函数的情况下,对三元运算符的SFINAE失败