У меня есть два класса (ClassA и ClassB), у которых есть два метода (сравнение и схождение). Эти методы работают точно так же, но эти классы не связаны полиморфно (по уважительной причине). Я хотел бы определить шаблон функции, который оба эти класса могут явным образом создавать экземпляр как член, но я получаю ошибки, потому что методы используют «это», и когда я превращаю их в шаблон, компилятор выдает ошибку, потому что они не являются функции-члены.C++ экземпляр шаблона функции как член класса и с помощью этого «указателя»
Возможно ли это из-за этого ограничения? Или есть способ использовать «это» внутри шаблона функции, который не объявлен как часть класса шаблона. Я провел некоторое исследование и ничего не нашел.
Logic.h
template <class T>
T* compare(const T& t) {
//stuff involving this
}
template <class T>
T* converge(const T& t,bool b) {
//other stuff involving this
}
ClassA.cpp
#include "ClassA.h"
#include "Logic.h"
//constructors
template ClassA* ClassA::compare(const ClassA& t) const;
template ClassA* ClassA::converge(const ClassA& t,bool b) const;
//other methods
ClassB аналогично.
Любая помощь приветствуется!
Это _ "шаблон функции" _, а не "функция шаблона", потому что эти вещи не являются функциями, а _templates_, из которых могут быть созданы экземпляры. – sbi
"эти классы не связаны полиморфно (по уважительной причине)". - это очень похоже на то, что у них должна быть общая база, если можно написать функцию-член, совместимую с любым из них. Обратите внимание, что наследование не подразумевает полиморфизм (например, личное наследование). – Potatoswatter