我正在尝试编写一个带有两个模板类型的类.该类继承自接口.请参阅以下代码.
#include <iostream>
#include <string>
template <typename T>
class IObserver {
public:
virtual void Next(const T& value) noexcept = 0;
};
template <typename T1, typename T2>
class BinaryObserver : public IObserver<T1>, public IObserver<T2> {
public:
void Next(const T1& value) noexcept override{};
void Next(const T2& value) noexcept override{};
};
int main() {
// This is OK
BinaryObserver<int, float> mc1;
mc1.Next(0);
mc1.Next(0.0f);
// This fails to compile with "multiple overloads"
BinaryObserver<int, int> mc2;
mc2.Next(0);
mc2.Next(0);
}
Run Code Online (Sandbox Code Playgroud)
我遇到麻烦的时候T1是同一类型的T2.显然这意味着Next …
我正在尝试实现登录变异.该变异验证提供的id_token并通过会话记录用户.突变本身有效(用GraphiQL验证),但我遇到了将它与Relay集成的问题.
当用户登录时,整个中继存储可能会被更改,因为"viewer"是根查询.但我不想在胖查询中列出我的整个查询树.能够以某种方式清除整个商店会很好,但我没有看到这样做的方法react-router-relay.
中继突变:
export default class LoginMutation extends Relay.Mutation {
getMutation() {
return Relay.QL`mutation {login}`;
}
getVariables() {
return {
id_token: this.props.id_token
};
}
getFatQuery() {
// TODO: list everything?
return Relay.QL`
fragment on LoginPayload {
viewer
}
`;
}
getConfigs() {
return []; // TODO: not sure what to return...
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
Relay.Store.commitUpdate(new LoginMutation({id_token}), {
onSuccess: (resp) => {
history.push('/');
}
});
Run Code Online (Sandbox Code Playgroud)
GraphQL架构:
input LoginInput {
id_token: String!
clientMutationId: String!
}
type LoginPayload {
viewer: Viewer …Run Code Online (Sandbox Code Playgroud)