Vous pouvez passer le nom en tant qu'argument de chaîne :
void mModelRecorder::relu(Data::TensorIterator inputTensor, const char *name_of_arg);
rc.relu(conv, "conv");
Si vous souhaitez éviter de dupliquer le nom, vous pouvez utiliser une astuce avec des macros :
#define REFLECT_PASSED_ARG_NAME(arg) (arg), #arg
rc.relu(REFLECT_PASSED_ARG_NAME(conv));
Cependant, bien que cela supprime la duplication, cela réduit probablement la lisibilité. L'appel semble ne passer qu'un seul argument, alors qu'en réalité, la macro se développe en deux arguments. Cela peut être très déroutant.
De plus, je recommande de reconsidérer pourquoi vous aimeriez connaître le nom de la variable dans relu
. Si le comportement de la fonction dépend de ce détail, vous devriez probablement revoir la conception.
Par exemple, si vous souhaitez simplement donner un nom à un itérateur de tenseurs, alors mélanger le nom de l'itérateur et le nom de la variable est une très mauvaise idée. Au lieu de cela, vous pourriez créer un objet, avec des membres name
et iterator
, et stocker le nom dans ce membre. Exemple :
struct named_tensor_iterator {
std::string name;
Data::TensorIterator iterator;
};
// passer par référence pour éviter de copier le nom
void mModelRecorder::relu(const named_tensor_iterator& inputTensor);
named_tensor_iterator input {
"fancy iterator",
conv,
};
rc.relu(input);