#include <iostream>
#include <string>
struct player_name_tag {} PLAYER_NAME;
struct connection_timeout_tag {} CONNECTION_TIMEOUT;
template<class T>
struct constref_wrapper {
constref_wrapper(const T& x) noexcept
: content(x) {}
const T& getValue() const noexcept {
return content;
}
private:
const T& content;
};
struct ResourceManager {
static constref_wrapper<std::string> get(player_name_tag) {
return constref_wrapper<std::string>(name);
}
static constref_wrapper<int> get(connection_timeout_tag) {
return constref_wrapper<int>(timeout);
}
private:
static std::string name;
static int timeout;
};
std::string ResourceManager::name = "Rambo";
int ResourceManager::timeout = 100;
int main() {
std::cout << ResourceManager::get(PLAYER_NAME).getValue() << std::endl;
std::cout << ResourceManager::get(CONNECTION_TIMEOUT).getValue() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IHBsYXllcl9uYW1lX3RhZyB7fSBQTEFZRVJfTkFNRTsKc3RydWN0IGNvbm5lY3Rpb25fdGltZW91dF90YWcge30gQ09OTkVDVElPTl9USU1FT1VUOwoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IGNvbnN0cmVmX3dyYXBwZXIgewoJY29uc3RyZWZfd3JhcHBlcihjb25zdCBUJiB4KSBub2V4Y2VwdAoJOiBjb250ZW50KHgpIHt9CgkKCWNvbnN0IFQmIGdldFZhbHVlKCkgY29uc3Qgbm9leGNlcHQgewoJCXJldHVybiBjb250ZW50OwoJfQoJCglwcml2YXRlOgoJY29uc3QgVCYgY29udGVudDsKfTsKCnN0cnVjdCBSZXNvdXJjZU1hbmFnZXIgewoJc3RhdGljIGNvbnN0cmVmX3dyYXBwZXI8c3RkOjpzdHJpbmc+IGdldChwbGF5ZXJfbmFtZV90YWcpIHsKCQlyZXR1cm4gY29uc3RyZWZfd3JhcHBlcjxzdGQ6OnN0cmluZz4obmFtZSk7Cgl9CgkKCXN0YXRpYyBjb25zdHJlZl93cmFwcGVyPGludD4gZ2V0KGNvbm5lY3Rpb25fdGltZW91dF90YWcpIHsKCQlyZXR1cm4gY29uc3RyZWZfd3JhcHBlcjxpbnQ+KHRpbWVvdXQpOwoJfQoJCglwcml2YXRlOgoJc3RhdGljIHN0ZDo6c3RyaW5nIG5hbWU7CglzdGF0aWMgaW50IHRpbWVvdXQ7Cn07CgpzdGQ6OnN0cmluZyBSZXNvdXJjZU1hbmFnZXI6Om5hbWUgICAgPSAiUmFtYm8iOwppbnQgICAgICAgICBSZXNvdXJjZU1hbmFnZXI6OnRpbWVvdXQgPSAxMDA7CgppbnQgbWFpbigpIHsKCXN0ZDo6Y291dCA8PCBSZXNvdXJjZU1hbmFnZXI6OmdldChQTEFZRVJfTkFNRSkuZ2V0VmFsdWUoKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgUmVzb3VyY2VNYW5hZ2VyOjpnZXQoQ09OTkVDVElPTl9USU1FT1VUKS5nZXRWYWx1ZSgpIDw8IHN0ZDo6ZW5kbDsKfQ==