рдлрд┐рд░ рд╕реЗ рдирдорд╕реНрдХрд╛рд░!
"C ++ рдбреЗрд╡рд▓рдкрд░" рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рд╕рдореВрд╣ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рдкреНрддрд╛рд╣ рд╕реЗ рднреА рдХрдо рд╕рдордп рдмрдЪрд╛ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдо рдЗрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХреЛрдб рдХрд╛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд╕рдордп-рд╕рдордп рдкрд░ рдЦреБрдж рдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред (рдЖрдк рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╣реА?) рдХреБрдЫ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВред рдХрднреА-рдХрднреА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдореЙрдХ-рдХреЛрдб (рд╕реНрдЯрдм) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдХрдореА рд╣реИред рдореИрдВрдиреЗ рдХрдИ рдХрд╛рд░рдг рджреЗрдЦреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдиреАрдЪреЗ рдореИрдВрдиреЗ рдХреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд▓рдЧрднрдЧ рдмрдврд╝рддреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдПред
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рдФрд░ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИред
- рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рдирд┐рд░реНрдорд╛рддрд╛ рддрд░реНрдХ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдпрд╛ рдмрд╕ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
- рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХрдИ рдЗрдВрдЯрд░рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИред
рдЪрд▓реЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рдФрд░ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИ
рдпрд╣ рдорд╛рдорд▓рд╛ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдмрд╕ рд╕реНрдЯрдм рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рдореЙрдХ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЪреЗрдХ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╡рд╣ рд╕рдм рд╣реИред
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдмрд╛рдХреА рдЕрдирдВрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рдмрд╛рдд рдХрд╣рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХрд╛: рдкреИрдЯрд░реНрди рд╕рд╛рдорд╛рдиреНрдпрддрд╛ рдХреЗ рдПрдХ рдорд╛рддреНрд░рд╛рддреНрдордХ рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдмрдирдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
template <class T> class TemplateUnderTest { T *t_; public: TemplateUnderTest(T *t) : t_(t) {} void SomeMethod() { t->DoSomething(); t->DoSomeOtherThing(); } }; struct MockT { void DoSomething() {
рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рдирд┐рд░реНрдорд╛рддрд╛ рддрд░реНрдХ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдпрд╛ рдмрд╕ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░рдг рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЖрдк
friend
рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
template <class T> class TemplateUnderTest { T t_; friend class UnitTest; public: void SomeMethod() { t.DoSomething(); t.DoSomeOtherThing(); } }; class UnitTest { void Test2() { TemplateUnderTest<MockT> test; test.SomeMethod(); assert(DoSomethingWasCalled(test.t_));
UnitTest :: Test2
рдХрд╛ рдЙрдкрдпреЛрдЧ TemplateUnderTest рдХреЗ рд╢рд░реАрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ рдФрд░ MockT рдХреА рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкрд░ рдмрдпрд╛рдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХрдИ рдЗрдВрдЯрд░рдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ
рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг
рджреЗрдЦреВрдВрдЧрд╛ :
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Google RPC ред
C ++ рдореЗрдВ, async gRPC рдореЗрдВ CallData рдирд╛рдордХ рдХреБрдЫ рд╣реИ, рдЬреЛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ,
RPC рдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд
рдХрд░рддрд╛ рд╣реИ ред CallData рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ RPC рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЦрд╛рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп CallData рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
template <class Request, class Response> class CallData { grpc::ServerCompletionQueue *cq_; grpc::ServerContext context_; grpc::ServerAsyncResponseWriter<Response> responder_;
CallData рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ HandleRequest рдФрд░ HandleResponse рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд╛рдБрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдХрдИ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрдирдХреЗ рдХреЙрд▓ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдХреЙрд▓рдбрд╛рдЯрд╛ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрдкрд░рд┐ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣рд╛рдБ рдЪрд╛рд▓реЗрдВ рд╣реИрдВред
- Grpc рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
ServerAsyncResponseWriter
рдФрд░ ServerContext
ред grpc :: ServerCompletionQueue
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЖрднрд╛рд╕реА рд╡рд┐рдзреНрд╡рдВрд╕рдХредgrpc :: ServerContext
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред
рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдкреВрд░реНрдг рдЬреАрдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЙрд▓рдбрд╛рдЯрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП? ServerCompletionQueue рдХрд╛ рдЕрдиреБрдХрд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВ? ServerAsyncResponseWriter рдХрд╛ рдЕрдиреБрдХрд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВ, рдЬреЛ рд╕реНрд╡рдпрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ? рдФрд░ рдЗрд╕реА рддрд░рд╣ ...
рдЖрднрд╛рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд┐рдирд╛, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рдХрдард┐рди рдХрд╛рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд░реНрдбрдХреИрдкреНрдб рдкреНрд░рдХрд╛рд░, рдЬреИрд╕реЗ рдХрд┐ grpc :: ServerAsyncResponseWriter, рдХреЛ рдореЙрдбрд▓рд┐рдВрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣реИрдВ, рд╣рдореНрдо, рд╣рд╛рд░реНрдбрдХреЛрдб рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдирд╣реАрдВред
рдЙрдиреНрд╣реЗрдВ рд░рдЪрдирд╛рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдордЭ рд╣реИред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдВрддрд┐рдо рд╡рд░реНрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдмрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рддреЛ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВ?
рд╕рдорд╛рдзрд╛рди: рд▓рдХреНрд╖рдг

рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ (рдЬреИрд╕рд╛ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдХрд╕реНрдЯрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЯрд╛рдЗрдк рдХрд░реЗрдВред рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рд╣реИ: рдПрдХ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдпрд╛ рдПрдХ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛрдбред
CallDataTraits
рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
template <class CallData> class CallDataTraits { using ServerCompletionQueue = grpc::ServerCompletionQueue; using ServerContext = grpc::ServerContext; using ServerAsyncResponseWriter = grpc::ServerAsyncResponseWrite<typename CallData::ResponseType>; };
рдпрд╣ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред рдЪрд▓реЛ рдЗрд╕реЗ рдХреЙрд▓рдбреИрдЯрдореЗрдЯрдкреНрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдЕрднреА рднреА grpc рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдбрдореА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде grpc рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рджреЗрдЦреЗрдВред
рд▓рдХреНрд╖рдгреЛрдВ рдиреЗ рд╣рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЙрд▓рдбрд╛рдЯрд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рджрд░реНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд┐рдо рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдк рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ? рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрд┐рдПред рдФрд░ рдЦреБрд▓реЗ рджрд░рд╡рд╛рдЬреЗ рдкрд░ рдЖрдкрдХреЛ рджреЗрдЦрдиреЗ ;-)