CD
Size: a a a
CD
AG
==================
FRAMEWORK
class PackageBase
{
virtual size_t size() = 0;
virtual size_t weight() = 0;
}
Class C {
PackageBase p_;
set_package(PackageBase &&p);
is_package(const PackageBase &p); // deep copy?!
}
===================
USAGE
template<std::size_t P, std::size_t N>
class P1 : public PackageBase {…}
template<typename T>
class P2 : public PackageBase {…}
C c;
c.set_package(std::move(P<2, 5>{weight = 5}));
c.is_package(P<2, 5>{weight = 5}); // Создавать объект не надо. Достаточно сравнить тип
CD
static char * name() {
static constexpr char* id = __FUNCTION__;
return id;
}
AG
struct CBase {
virtual const char* type_handle() const = 0;
};
template <typename T>
class C : public CBase {
static constexpr char * name() {
return __FUNCTION__;
}
const char* type_handle() const override {
return name();
}
};
CD
AG
CD
AG
AG
CD
AG
CD
CD
CD
AG
CD
AG
CD