我有以下变体:
typedef boost::variant<double, long int, std::string> ConfigVariant;
然后我定义了一个地图:
std::map<std::string, ConfigVariant> config_values;
我的Config类中也有这个operator[]
(Config包含变体和映射):
ConfigVariant & Config::operator[] (const string &key) {
return config_values[key];
}
理想情况下,我想说double d = config_values["double_key"]
而不是double d = boost::get<double>(config_values["double_key"])
。根据这个问题和答案,应该可以使用带有模板转换运算符的非模板代理来做我想做的事情,但我不确定如何做。有人能提供一些指导吗?谢谢
您缺少一些能够正确回答的细节;即除了CCD_ 5成员之外,您不谈论任何关于CCD_ 4的内容。
也许将Config::operator[]
实现为调用boost::get<>
的模板,所以不使用
ConfigVariant & Config::operator[] (const string &key) {
return config_values[key];
}
你有:
template<typename T>
T &Config::operator[] (const string &key) {
return boost::get<T>(config_values["double_key"]);
}
现在你可以写了
double d = config["double_key"];
假设config
是类型Config