// #include <iostream>
// class Singleton {
// private:
// static Singleton* instance;
// Singleton() {}
// public:
// static Singleton* GetInstance() {
// if (instance == nullptr) {
// instance = new Singleton();
// }
// return instance;
// }
// static void DestroyInstance() {
// if (instance == nullptr) {
// return;
// }
// delete instance;
// }
// };
// Singleton* Singleton::instance = nullptr;
// int main() {
// Singleton* s1 = Singleton::GetInstance();
// Singleton* s2 = Singleton::GetInstance();
// if (s1 == s2) {
// std::cout << "s1 and s2 are the same instance\n";
// }
// Singleton::DestroyInstance();
// }
#include<string>
class TradePair {
const std::string currencyFirst;
const std::string currencySecond;
public:
TradePair(const std::string& nameFirst,
const std::string& nameSecond) : currencyFirst(nameFirst),
currencySecond(nameSecond) {
// Проверяем, что nameFirst - существует
// Проверяем, что nameSecond - существует
// Создаем подключение к серверу и т.п.
}
void Trade() {};
std::pair<std::string, std::string> GetNames() const {
return {currencyFirst, currencySecond};
}
};
class TradePairFactory {
public:
static TradePair Create(const std::string& nameFirst, const std::string& nameSecond) {
return TradePair(nameFirst, nameSecond);
}
};
int main() {
auto pair1 = TradePairFactory::Create("RUB", "USD");
auto pair2 = TradePairFactory::Create("USD", "EUR");
}
Ly8gI2luY2x1ZGUgPGlvc3RyZWFtPgovLyBjbGFzcyBTaW5nbGV0b24gewovLyBwcml2YXRlOgovLyAgICAgc3RhdGljIFNpbmdsZXRvbiogaW5zdGFuY2U7Ci8vICAgICBTaW5nbGV0b24oKSB7fQovLyBwdWJsaWM6Ci8vICAgICBzdGF0aWMgU2luZ2xldG9uKiBHZXRJbnN0YW5jZSgpIHsKLy8gICAgICAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbHB0cikgewovLyAgICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBTaW5nbGV0b24oKTsKLy8gICAgICAgICB9Ci8vICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwovLyAgICAgfQovLyAgICAgc3RhdGljIHZvaWQgRGVzdHJveUluc3RhbmNlKCkgewovLyAgICAgICAgIGlmIChpbnN0YW5jZSA9PSBudWxscHRyKSB7Ci8vICAgICAgICAgICAgIHJldHVybjsKLy8gICAgICAgICB9Ci8vICAgICAgICAgZGVsZXRlIGluc3RhbmNlOwovLyAgICAgfQovLyB9OwoKLy8gU2luZ2xldG9uKiBTaW5nbGV0b246Omluc3RhbmNlID0gbnVsbHB0cjsKCi8vIGludCBtYWluKCkgewovLyAgICAgU2luZ2xldG9uKiBzMSA9IFNpbmdsZXRvbjo6R2V0SW5zdGFuY2UoKTsKLy8gICAgIFNpbmdsZXRvbiogczIgPSBTaW5nbGV0b246OkdldEluc3RhbmNlKCk7CgovLyAgICAgaWYgKHMxID09IHMyKSB7Ci8vICAgICAgICAgc3RkOjpjb3V0IDw8ICJzMSBhbmQgczIgYXJlIHRoZSBzYW1lIGluc3RhbmNlXG4iOwovLyAgICAgfQovLyAgICAgU2luZ2xldG9uOjpEZXN0cm95SW5zdGFuY2UoKTsKLy8gfQoKI2luY2x1ZGU8c3RyaW5nPgoKY2xhc3MgVHJhZGVQYWlyIHsKICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGN1cnJlbmN5Rmlyc3Q7CiAgICBjb25zdCBzdGQ6OnN0cmluZyBjdXJyZW5jeVNlY29uZDsKcHVibGljOgogICAgVHJhZGVQYWlyKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lRmlyc3QsCiAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWVTZWNvbmQpIDogY3VycmVuY3lGaXJzdChuYW1lRmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5U2Vjb25kKG5hbWVTZWNvbmQpIHsKICAgICAgICAvLyDQn9GA0L7QstC10YDRj9C10LwsINGH0YLQviBuYW1lRmlyc3QgLSDRgdGD0YnQtdGB0YLQstGD0LXRggogICAgICAgIC8vINCf0YDQvtCy0LXRgNGP0LXQvCwg0YfRgtC+IG5hbWVTZWNvbmQgLSDRgdGD0YnQtdGB0YLQstGD0LXRggogICAgICAgIC8vINCh0L7Qt9C00LDQtdC8INC/0L7QtNC60LvRjtGH0LXQvdC40LUg0Log0YHQtdGA0LLQtdGA0YMg0Lgg0YIu0L8uCiAgICB9CiAgICB2b2lkIFRyYWRlKCkge307CiAgICBzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBHZXROYW1lcygpIGNvbnN0IHsKICAgICAgICByZXR1cm4ge2N1cnJlbmN5Rmlyc3QsIGN1cnJlbmN5U2Vjb25kfTsKICAgIH0KfTsKCmNsYXNzIFRyYWRlUGFpckZhY3RvcnkgewpwdWJsaWM6CiAgICBzdGF0aWMgVHJhZGVQYWlyIENyZWF0ZShjb25zdCBzdGQ6OnN0cmluZyYgbmFtZUZpcnN0LCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZVNlY29uZCkgewogICAgICAgIHJldHVybiBUcmFkZVBhaXIobmFtZUZpcnN0LCBuYW1lU2Vjb25kKTsKICAgIH0KfTsKCmludCBtYWluKCkgewogICAgYXV0byBwYWlyMSA9IFRyYWRlUGFpckZhY3Rvcnk6OkNyZWF0ZSgiUlVCIiwgIlVTRCIpOwogICAgYXV0byBwYWlyMiA9IFRyYWRlUGFpckZhY3Rvcnk6OkNyZWF0ZSgiVVNEIiwgIkVVUiIpOwp9