Ich erstelle Containervorlagen für verschiedene Typen. Ein Typ ist shared_ptr für das Objekt. Also um doppelten Code für Operanden zu vermeiden -> und. zum Aufrufen von Objektmethoden. Ich versuche, Teil-Vorlage spetialization zu tun, aber ich habe diesen Fehler:Template Klassenspezialisierung - "Operation 'wurde in diesem Bereich nicht deklariert."
error: variable or field 'doOperation' declared void void MepVector<unique_ptr<T>, U>::doOperation(Operation operation) error: 'Operation' was not declared in this scope
Code:
template <typename T, typename U>
class MepVector
{
private:
typedef void(U::*Operation)();
public:
MepVector() {}
void doOperation(Operation operation);
void add(T t)
{ mepVector_.push_back(t); }
void show()
{ doOperation(&U::show); }
private:
std::vector<T> mepVector_;
};
template <typename T, typename U>
void MepVector<unique_ptr<T>, U>::doOperation(Operation operation)
{
for(auto& t : mepVector_)
{
(t->*operation)();
}
}
template <typename T, typename U>
void MepVector<T, U>::doOperation(Operation operation)
{
for(auto& t : mepVector_)
{
(t.*operation)();
}
}
class A
{
public:
A() {};
void show()
{ cout<<"udalo sie!"<<endl; }
};
int main() {
MepVector<A,A> myVector;
myVector.add(A());
myVector.show();
return 0;
}
Operation ist ein typedef Zeiger – user3191398
ohh ja, aber Sie haben diesen Zeiger im privaten Modus deklariert .. aber es sollte im öffentlichen Modus sein .. – Shiv
hat es nicht geholfen – user3191398