Checking if a sequence container is contiguous in memory.
C++ templates that accept only certain typesWie zu erkennen, ob ein Container-Sequenz Lagerung haben garantiert
ich ein einfaches send()
Verfahren schreibe, die mit C-Stil Zeiger intern arbeitet. Ich möchte, dass es mit allen garantierten Sequenzcontainern arbeiten kann. Meine Motivation ist ein zweifaches:
- eine flexible Schnittstelle
- Effizienz - mit
std::array
Heapzuweisungen vermeidet.
Hier ist, wie weit ich bin:
template <typename Container>
void poll(Container &out)
{
static_assert(std::is_base_of< std::array<typename Container::value_type>, Container >::value ||
std::is_base_of< std::vector<typename Container::value_type>, Container >::value ||
std::is_base_of< std::string<typename Container::value_type>, Container >::value,
"A contiguous memory container is required.");
}
Das Problem ist, std::array
einen zweiten Parameter erfordert, und das kann nicht zum Zeitpunkt der Kompilierung bekannt sein. Ist dieses Problem lösbar? Möglicherweise durch einen anderen Ansatz?
Oder fügen Sie einfach eine Überladung hinzu. (Aus diesem Grund können Sie Funktionen nicht teilweise spezialisieren) – MSalters