МВ
Size: a a a
МВ
МВ
МВ
МВ
МВ
МВ
МВ
МВ
МВ
МВ
МВ
cannot pass argument this.m_data of type Derived to parameter ref Base
МВ
МВ
МВ
МВ
МВ
#include <iostream>
namespace Test {
class Base {
public:
virtual ~Base() = default;
virtual void test() = 0;
};
class Derived: public Base {
public:
void test() { std::cout << "Test" << std::endl; }
};
Derived * make() {
return new Derived;
}
void free(Derived *& p) {
delete p;
p = nullptr;
}
void exec_test(Base * p) { p-> test(); }
}
МВ
extern (C++, Test) {
interface Base {
void test();
}
class Derived: Base {
void test();
}
Derived make();
void free(ref Derived p);
void exec_test(Base p);
}
void main(string[] args)
{
Derived d = make();
scope(exit) free(d);
Base as_base = d;
exec_test(as_base);
}