Unify handling of string-like arguments across the API

Ouverte
#1,745 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
55/100
Type d'issue
Refactorisation
Clarté
Plutôt claire
Activité
Calme
Stack technique
cpp
Domaine
api

Piste de recherche

Commencez par localiser les déclarations et les implémentations de String::New, Symbol::New et Symbol::For, puis comparez leurs surcharges existantes pour std::string et std::string_view. La tâche est terminée lorsque les surcharges redondantes sont unifiées au moyen du template contraint de type string_view, tandis que const char* et les littéraux conservent leur traitement dédié et que nullptr reste exclu.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

SemVer-major

Follow-up to #1741 / #1742.

Several APIs still carry multiple overloads for different string types. Now that the library requires C++17, we can modernize by preferring std::string_view and removing the redundant UTF-8 overloads, replacing them with a single constrained template, as a semver-major change.

For String::New, Symbol::New, and Symbol::For, collapse the const std::string& + std::string_view pair into:

template <typename T,
          std::enable_if_t<
              std::is_convertible_v<const T&, std::string_view> &&
              !std::is_convertible_v<const T&, const char*>, int> = 0>
static String New(napi_env env, const T& t);

This matches the C++17 standard-library idiom (std::string's find/append/compare/… members). The !is_convertible_v<const T&, const char*> clause keeps const char* and literals on the dedicated overload and filters nullptr (avoiding a UB string_view(nullptr)).

The enable_if alias is shareable across APIs e.g. enable_if_string_view_like_t<T>.

Langage dominant
C++
Étoiles
2.4k
Forks
499
Merge moyen
2 j 11 h
PR mergées (30 j)
2

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de nodejs/node-addon-api

Toutes les issues de nodejs/node-addon-api

Issues similaires

Plus d'issues C++

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.