GOOGLE ADS

samedi 23 avril 2022

Comment passer des initialiseurs pour le membre de classe de modèle C++ dans le constructeur ?

Let's say I have following C++ class

template<uint32_t NUM_OF_POINTS>
class A
{
public:
struct Point {
float x;
float y;
};
// here I don't know how to pass the initializers for the private member
A();
private:
Point table[NUM_OF_POINTS];
};

J'ai cherché un moyen de transmettre les initialiseurs du membre tablevia le constructeur, c'est-à-dire que j'aimerais pouvoir le faire:

A<4> a({{0.0, 0.0}, {1.0, 1.0}, {2.0, 2.0}, {3.0, 3.0}});

Est-ce toujours possible en C++, par exemple via les modèles variadiques ?


Solution du problème

Est-ce possible en C++?

L'une des alternatives consiste à prendre un paramètre de type Point (&&)[NUM_OF_POINTS]puis à utiliser std::copypour copier la valeur dans la variable membre

A(Point (&&arr)[NUM_OF_POINTS]) {
std::copy(arr, arr + NUM_OF_POINTS, table);
}

Démo

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...