Ist es möglich, ConstExPR zu verwenden, wenn der Typ ein Container oder ein STD :: String [Duplicate] ist
Posted: 28 Feb 2025, 08:49
Zum Beispiel habe ich diese Klasse: < /p>
Wie ich verstehe, String_View , std :: string , std :: vector und std :: span haben einige allgemeine Eigenschaften, die ich den gleichen Analysefunktion erstellen könnte. Gibt es also eine Möglichkeit zu verwenden, wenn Contexpr prüft, ob dieser Typ ein Container ist, ohne ein || für jeden einzelnen zu schreiben, und nur ein Konzept zu verwenden, um zu garantieren, dass dieser Container eine bestimmte Eigenschaften haben sollte, die eine bestimmte Eigenschaften haben sollte, wie in der Reichweite der Bereichsschleife fähig. std :: vector , std :: array oder sogar uint8_t* oder char*?
Code: Select all
template
class TLVParser {
public:
TLVParser(T value)
: value_(std::move(value)) {
}
void parse(const std::span& buffer, size_t& offset) {
if constexpr (std::is_arithmetic_v)
{
return parsePrimitive(buffer, offset);
}
else if constexpr (std::is_same_v
|| std::is_same_v)
{
return parseStringView(buffer, offset);
}
else if constexpr (std::is_same_v
|| std::is_same_v)
{
return parseContainer(buffer, offset);
}
else
{
static_assert(always_false::value, "Unsupported type for TLV parsing");
}
}
private:
T value_;
};