J'ai une classe définie par deux modèles.Définir la conversion implicite d'une classe de modèle en type primitif basée sur un autre modèle
template<typename A, typename B> my_class {
private:
A value;
public:
operator A() {
return this->value;
}
};
Je veux définir une conversion implicite entre la classe et le premier type dans le modèle, mais seulement pour un second type spécifique sur le modèle. Puisque A
est un type primitif C++ je ne peux pas définir la conversion de ce côté. J'ai essayé std::enable_if
comme ça
operator typename std::enable_if<std::is_same<B, specific_B_type>::value, NumT>::type() {
return this->value;
}
mais je reçois l'erreur de compilation
Error C2833 'operator type' is not a recognized operator or type dimensional_analysis
Est-il possible de le faire sans avoir à définir toute la classe spécialisée pour B = specific_B_type
?
Malheureusement, je viens de découvrir que ma réponse ne fonctionne pas ... Il semble que cela désactive toute l'instanciation de la classe, pas seulement l'opérateur ... Pourriez-vous la désactiver, donc je peux la supprimer? :) – Knoep
D'accord, trouvé une autre solution (beaucoup plus simple). Est-ce toujours ce que tu veux? – Knoep
J'utilise actuellement la première solution que vous avez donnée 'template :: value, void> :: type>'. Cela semble fonctionner, mais je ne l'ai peut-être pas suffisamment testé. Quelle est ta meilleure solution? Merci d'avance! –
mbtg