J'ai une classe basé sur un modèle C++ qui expose un certain nombre de méthodes, par exempleméthodes Ajout à la spécialisation du modèle
template<int X, int Y>
class MyBuffer {
public:
MyBuffer<X,Y> method1();
};
Maintenant, je veux exposer d'autres méthodes à cette classe si X == Y. Je l'ai fait par le sous-classement MyBuffer,
template<int X>
class MyRegularBuffer : public MyBuffer<X,X> {
public:
MyRegularBuffer method2();
};
Maintenant, le problème est que je veux être en mesure de faire par exemple
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> otherBuf = buf.method1().method2();
Mais je ne suis pas sûr de savoir comment accomplir cela. J'ai essayé de penser à des constructeurs de copie, des opérateurs de conversion, etc., mais mes compétences C++ sont malheureusement un peu rouillées.
EDIT: Je dois ajouter que la création de ces objets est relativement pas cher (et aussi, il ne se produira pas beaucoup), ce qui signifie qu'il serait correct de faire quelque chose comme ceci:
MyRegularBuffer<2> buf = ...
MyRegularBuffer<2> temp = buf.method1(); // Implicit conversion
MyRegularBuffer<2> otherBuf = temp.method2();
Le question est alors, comment puis-je définir la conversion comme ça. L'opérateur de conversion doit être dans MyBuffer, je pense, mais je veux qu'il soit disponible seulement si X == Y.
complètement incompréhensible. Par exemple, vous parlez de "l'opérateur de conversion", mais il n'y en a pas. Postez du vrai code. –
@Neil, je pense que l'utilisateur a posé une véritable question au mieux de leurs capacités. Et je pense que je le comprends un peu. –
@Aaron Dans ce cas, merci de partager votre compréhension. –