我有以下变体:
typedef boost::variant<double, long int, std::string> ConfigVariant;
然后我定义一个 map :
std::map<std::string, ConfigVariant> config_values;
我也有这个operator[]
在我的 Config 类中(Config 包含变体和 map ):
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"])
.根据this question and answer ,应该可以使用带有模板转换运算符的非模板代理来做我想做的事,但我不确定如何做。有人可以提供一些指导吗?谢谢。
最佳答案
您遗漏了一些无法正确回答的细节;也就是说,你什么都不说 Config
除了operator[]
成员(member)。
也许实现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
关于c++ - 我如何使用具有模板转换运算符的非模板代理对象来避免指定我的 boost::variant 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17886408/