#include <memory>
#include <iostream>
#define RC
#define WR
#define mixin class
#define interface class
typedef unsigned short ushort;
typedef unsigned long long ulong64;
typedef unsigned long ulong;
// Фолдеры.
namespace WPShell
{
// Внутренние классы.
namespace private_classes
{
interface IFrameWindow
{
// ...
};
interface IClientWindow
{
// ...
};
template <interface F, interface C> interface AFolder
{
// ...
};
template <interface F, interface C> interface IFolder : public AFolder <F, C>
{
// ...
};
template <interface F, interface C> mixin TFolder
{
// ...
};
};
using IFrameWindow = private_classes::IFrameWindow;
using IClientWindow = private_classes::IClientWindow;
using IFolder = private_classes::IFolder <private_classes::IFrameWindow,
private_classes::IClientWindow>;
using TFolder = private_classes::TFolder <private_classes::IFrameWindow,
private_classes::IClientWindow>;
class WR Folder : public IFolder, private TFolder
{
friend class wps;
public:
Folder (const char *title)
{
std::cout << title << std::endl;
}
virtual ~Folder ()
{
;
}
// ...
;
private:
// ...
;
};
class wps
{
public:
static void setTitle (const IFolder WR &,
const char *, const char * = nullptr);
// ...
;
private:
// ...
;
};
void wps::setTitle (const IFolder WR &folder,
const char *title, const char *docName)
{
std::cout << title << std::endl
<< docName << std::endl;
}
// ...
};
using namespace WPShell;
int main ()
{
std::shared_ptr <Folder> folder (
new Folder (
"Hello, World!"
)
);
wps::setTitle (*folder, "Folder", "Icon view");
return 0;
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBSQwojZGVmaW5lIFdSCiNkZWZpbmUgbWl4aW4gY2xhc3MKI2RlZmluZSBpbnRlcmZhY2UgY2xhc3MKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bG9uZzY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWxvbmc7CgovLyDQpNC+0LvQtNC10YDRiy4KbmFtZXNwYWNlIFdQU2hlbGwKewogIC8vINCS0L3Rg9GC0YDQtdC90L3QuNC1INC60LvQsNGB0YHRiy4KICBuYW1lc3BhY2UgcHJpdmF0ZV9jbGFzc2VzCiAgewogICAgaW50ZXJmYWNlIElGcmFtZVdpbmRvdyAKICAgIHsKICAgICAgLy8gLi4uCiAgICB9OwoKICAgIGludGVyZmFjZSBJQ2xpZW50V2luZG93IAogICAgewogICAgICAvLyAuLi4KICAgIH07CgogICAgdGVtcGxhdGUgPGludGVyZmFjZSBGLCBpbnRlcmZhY2UgQz4gaW50ZXJmYWNlIEFGb2xkZXIKICAgIHsKICAgICAgLy8gLi4uCiAgICB9OwogICAgCiAgICB0ZW1wbGF0ZSA8aW50ZXJmYWNlIEYsIGludGVyZmFjZSBDPiBpbnRlcmZhY2UgSUZvbGRlciA6IHB1YmxpYyBBRm9sZGVyIDxGLCBDPgogICAgewogICAgICAvLyAuLi4KICAgIH07CgogICAgdGVtcGxhdGUgPGludGVyZmFjZSBGLCBpbnRlcmZhY2UgQz4gbWl4aW4gVEZvbGRlciAKICAgIHsKICAgICAgLy8gLi4uCiAgICB9OwogIH07CgogIHVzaW5nIElGcmFtZVdpbmRvdyA9IHByaXZhdGVfY2xhc3Nlczo6SUZyYW1lV2luZG93OwogIHVzaW5nIElDbGllbnRXaW5kb3cgPSBwcml2YXRlX2NsYXNzZXM6OklDbGllbnRXaW5kb3c7CiAgdXNpbmcgSUZvbGRlciA9IHByaXZhdGVfY2xhc3Nlczo6SUZvbGRlciA8cHJpdmF0ZV9jbGFzc2VzOjpJRnJhbWVXaW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZV9jbGFzc2VzOjpJQ2xpZW50V2luZG93PjsKICB1c2luZyBURm9sZGVyID0gcHJpdmF0ZV9jbGFzc2VzOjpURm9sZGVyIDxwcml2YXRlX2NsYXNzZXM6OklGcmFtZVdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlX2NsYXNzZXM6OklDbGllbnRXaW5kb3c+OwoKICBjbGFzcyBXUiBGb2xkZXIgOiBwdWJsaWMgSUZvbGRlciwgcHJpdmF0ZSBURm9sZGVyCiAgewogICAgZnJpZW5kIGNsYXNzIHdwczsKCiAgICBwdWJsaWM6CiAgICAgIEZvbGRlciAoY29uc3QgY2hhciAqdGl0bGUpCiAgICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgdGl0bGUgPDwgc3RkOjplbmRsOwogICAgICB9CgogICAgICB2aXJ0dWFsIH5Gb2xkZXIgKCkKICAgICAgewogICAgICAgIDsKICAgICAgfQoKICAgICAgLy8gLi4uCgogICAgOyAgICAKCiAgICBwcml2YXRlOgoKICAgICAgLy8gLi4uCgogICAgOwogIH07CgogIGNsYXNzIHdwcwogIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQgc2V0VGl0bGUgKGNvbnN0IElGb2xkZXIgV1IgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqID0gbnVsbHB0cik7CgogICAgICAvLyAuLi4KCiAgICA7CgogICAgcHJpdmF0ZToKCiAgICAgIC8vIC4uLgoKICAgIDsKICB9OwoKICB2b2lkIHdwczo6c2V0VGl0bGUgKGNvbnN0IElGb2xkZXIgV1IgJmZvbGRlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpkb2NOYW1lKQogIHsKICAgIHN0ZDo6Y291dCA8PCB0aXRsZSA8PCBzdGQ6OmVuZGwgCiAgICAgICAgICAgICAgPDwgZG9jTmFtZSA8PCBzdGQ6OmVuZGw7CiAgfQoKICAvLyAuLi4KCn07Cgp1c2luZyBuYW1lc3BhY2UgV1BTaGVsbDsKCmludCBtYWluICgpIAp7CiAgc3RkOjpzaGFyZWRfcHRyIDxGb2xkZXI+IGZvbGRlciAoCiAgICBuZXcgRm9sZGVyICgKICAgICAgIkhlbGxvLCBXb3JsZCEiCiAgICApCiAgKTsKCiAgd3BzOjpzZXRUaXRsZSAoKmZvbGRlciwgIkZvbGRlciIsICJJY29uIHZpZXciKTsgICAKCQogIHJldHVybiAwOwp9Cg==