▲>>1648715
не, ну смотря чем и с какой целью. какой-нить 2c-* или ешкой помоему будет весьма и весьма полезно, как раз ходить картины смотреть и вообще выставки. понятно, что в духе страха и ненависти в ласвегасе то нет смысла и вообще очень глупый поступок.
%%а так я программирую например так иногда.
особенно вот такое:
#include <type_traits>
#include <memory>
#define PREPARE_BASE_METHOD_W_2ARGS_CALL_HELPERS(METHOD_NAME, RETURN_TYPE, ARG1, ARG2) \
namespace detail{ \
template <class Base, class T, class = std::enable_if_t<std::is_same<RETURN_TYPE, decltype(std::declval<Base&>().METHOD_NAME( std::declval<ARG1>(), std::declval<ARG2>())) >::value>> \
auto call_##METHOD_NAME##_if_any_impl(T& obj, ARG1 arg1, ARG2 arg2, int) -> decltype(std::make_unique<decltype(obj.Base::METHOD_NAME(std::declval<ARG1>(), std::declval<ARG2>()))>()) { \
return std::make_unique<RETURN_TYPE>(std::forward<RETURN_TYPE>(obj.Base::METHOD_NAME(arg1, arg2))); \
} \
template <class Base, class T> RETURN_TYPE call_##METHOD_NAME##_if_any_impl(T& obj, ARG1 arg1, ARG2 arg2, ...) { \
UNUSED(obj); UNUSED(arg1); UNUSED(arg2); \
return std::unique_ptr<RETURN_TYPE>(); \
} \
template <class Base, class T> RETURN_TYPE call_##METHOD_NAME##_if_any(T& obj, ARG1 arg1, ARG2 arg2) { \
return call_##METHOD_NAME##_if_any_impl<Base>(obj, arg1, arg2, 0); \
} \
} \