Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class NVBase
- {
- protected:
- virtual void virtualAction (void * ...) = 0;
- };
- template <typename RetType, typename ... ArgTypes>
- struct VBase : private NVBase
- {
- RetType makeBorsch (ArgTypes ... args)
- {
- RetType output;
- virtualAction (&output, args ...);
- return output;
- }
- };
- template <typename T, typename P>
- class YourMomma : public VBase <T, P>
- {
- void virtualAction (void * out_ptr ...) override
- {
- auto typed_out = static_cast <T *> (out_ptr);
- va_list data;
- va_start (data, out_ptr);
- auto arg1 = va_arg (data, P);
- //борщ среднестатистичекой мамки
- }
- //...
- public:
- //...
- };
- class WhoreSister : public YourMomma <int, double>
- {
- void virtualAction (void * out_ptr ...) override
- {
- auto typed_out = static_cast <int *> (out_ptr);
- va_list data;
- va_start (data, out_ptr);
- auto arg1 = va_arg (data, double);
- //борщ твоей сестры-шлюхи
- }
- //...
- public:
- //...
- };
- //...
- WhoreSister anya {};
- YourMomma <int, double> nadezhda_srakovna {};
- YourMomma <int, double> & anya_ref = anya;
- YourMomma <int, double> & mamka_ref = nadezhda_srakovna;
- anya_ref.makeBorsch (1.0); //борщ сестры
- mamka_ref.makeBorsch (1.0); //борщ мамки
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement