T
tthunder
Hi @all,
I've got an interesting problem.
These are my classes:
----------------------
class fooBase
{
virtual func();
}
class fooA : public fooBase
{
virtual func();
};
class fooB : public fooBase
{
virtual func1() = 0;
virtual func2();
};
class fooB2 : public fooB
{
virtual func1();
}
----------------------
// Template class
class myFooBase
{
fooBase *m_pPtr;
};
template <class T>
class myFoo : public myFooBase
{
public:
myFoo(fooBase *p_pPtr) :
m_pPtr(p_pPtr)
{
}
bool isCompatible(myFoo *p_p)
{
// Check, if p_p is compatible (dynamic_castable) to T
// Possible way:
T *TempPtr = new T();
if (dynamic_cast<T *> (p_p->m_pPtr))
}
};
----------------------
int main()
{
fooB2 *TEST1 = new fooB2();
myFoo<fooB2> test1(dynamic_cast<fooBase *>(new fooB2()));
myFoo<fooBase> test2(dynamic_cast<fooBase *>(new fooBase()));
// Test: OK
test2.isCompatible(&test1);
// Cannot create, because of new T() => fooB is an abstract class
myFoo<fooB> test3(dynamic_cast<fooBase *>(new fooB3()))
}
I've got an interesting problem.
These are my classes:
----------------------
class fooBase
{
virtual func();
}
class fooA : public fooBase
{
virtual func();
};
class fooB : public fooBase
{
virtual func1() = 0;
virtual func2();
};
class fooB2 : public fooB
{
virtual func1();
}
----------------------
// Template class
class myFooBase
{
fooBase *m_pPtr;
};
template <class T>
class myFoo : public myFooBase
{
public:
myFoo(fooBase *p_pPtr) :
m_pPtr(p_pPtr)
{
}
bool isCompatible(myFoo *p_p)
{
// Check, if p_p is compatible (dynamic_castable) to T
// Possible way:
T *TempPtr = new T();
if (dynamic_cast<T *> (p_p->m_pPtr))
}
};
----------------------
int main()
{
fooB2 *TEST1 = new fooB2();
myFoo<fooB2> test1(dynamic_cast<fooBase *>(new fooB2()));
myFoo<fooBase> test2(dynamic_cast<fooBase *>(new fooBase()));
// Test: OK
test2.isCompatible(&test1);
// Cannot create, because of new T() => fooB is an abstract class
myFoo<fooB> test3(dynamic_cast<fooBase *>(new fooB3()))
}