Если ваш компилятор поддерживает это 1 , вы можете использовать специализации шаблонных функций:
class WorldSettings
{
private:
std::map<std::string, int> mIntegerStorage;
std::map<std::string, float> mFloatStorage;
std::map<std::string, std::string> mStringStorage;
public:
template <typename T>
T Get(const std::string &key); // purposely left undefined
};
...
template<>
int WorldSettings::Get<int>(const std::string& key) {
return mIntegerStorage[key];
}
template<>
float WorldSettings::Get<float>(const std::string& key) {
return mFloatStorage[key];
}
// etc
Обратите внимание, что методы не const
, поскольку map<>::operator[]
не const
.
Кроме того, если кто-то попытается использовать шаблон с типом, отличным от того, для которого вы указали специализацию, он получит ошибки компоновщика, поэтому ваш код не будет работать неправильно или что-либо еще.Что оптимально.
1 Если нет, см. @ gwiazdorrr ответ