К>Это ты нагородил. В скобках у тебя оператор запятая, а вовсе не конструктор команды. К>Нужно так: К>
К>m_pCommand = new TCommand<CCommand>( new CReceiveFile(), &CReceiveFile::Execute );
К>
Неа, не катит. Кричит следующее:
error C2664: 'TCommand<TExecuter>::TCommand(TExecuter *,TCommand<TExecuter>::Action)' : cannot convert parameter 2 from 'int (__thiscall CReceiveFile::* )(void *)' to 'TCommand<TExecuter>::Action'
with
[
TExecuter=CCommand
]
and
[
TExecuter=CCommand
]
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
d:\Faust\Projects\Win\MainCL\Main.cpp(211) : warning C4060: switch statement contains no 'case' or 'default' labels
К>Кстати. А кто будет мусор убирать?
Для простоты опустил, нужно быстренько наваять демо-версию, ньюансы потом... Вся эта рутина будет делаться внутри протокола.
Мой компьютер прогоняет бесконечный цикл за 9 секунд, но, мне кажется, он мог бы сделать это быстрее...
Здравствуйте, Кодт, Вы писали:
К>В том, что static_cast грамотно приводит указатели на члены, а реинтерпрет — грубо говоря, побитово копирует.
К>Где бы гвоздями прибить на видном месте: не пользуйтесь реинтерпретом, если не знаете, что он сделает!
Добро, давай тогда прибьем этот гвоздь!!!
Объясни разницу между этими двумя приведениями типов на примере этих двух классов:
class Base
{
public:
bool m_bFlag;
Base() : m_bFlag(false)
virtual bool Process0(void) = 0;
virtual bool Process1(void) { return m_bFlag; }
}
class DerivedLevel1 : public Base
{
public:
int m_iParam;
DerivedLevel1() : m_iParam(0)
virtual bool Process0(void) { m_bFlag = true; m_iParam++; }
virtual bool Process1(void) { return m_bFlag; }
}
int _tmain(int argc, _TCHAR* argv[])
{
Base* pBaseFirst = static_cast<Base*> (new DerivedLevel1());
Base* pBaseSecond = reinterpret_cast<Base*> (new DerivedLevel1());
}
Мой компьютер прогоняет бесконечный цикл за 9 секунд, но, мне кажется, он мог бы сделать это быстрее...
Здравствуйте, Faust, Вы писали:
К>>Где бы гвоздями прибить на видном месте: не пользуйтесь реинтерпретом, если не знаете, что он сделает!
F>Добро, давай тогда прибьем этот гвоздь!!! F>Объясни разницу между этими двумя приведениями типов на примере этих двух классов:
Давай немного перепишем их.
class Base1
{
char x[100];
};
class Base2
{
public:
virtual void foo() {}
};
class Derived: public Base1, public Base2
{
public:
virtual void foo() {}
};
main()
{
Derived* p0 = new Derived();
Base2* p1 = static_cast<Base2*>(p0);
Base2* p2 = reinterpret_cast<Base2*>(p0);
}