【发布时间】:2014-07-31 14:48:08
【问题描述】:
我有一个带有 map 属性的类,其值为 boost::variant。
typedef boost::variant<char, int, bool, unsigned short, float, timeval, double > MultiType;
class A {
public:
template<class T>
T& operator[](const std::string& key) {
return boost::get<T>(map_[key]);
}
template<class T>
std::string keyTypeToString(const std::string& key) {
std::stringstream ss;
ss << boost::get<T>(map_[key]);
return ss.str();
}
private:
std::map<std::string, MultiType> map_;
};
从主要:
A a;
a["param"];
编译器报告此错误:
../src/main.cpp:8:25: 错误:'a["param"]' 中的'operator[]' 不匹配
../src/main.cpp:8:25: 注意:候选人是:
../src/util/A.h:53:5: 注意:模板 T& A::operator[](const string&)
也许我错过了一些微不足道的东西,但我不明白我错在哪里..
【问题讨论】:
-
我在您的
[]调用中没有看到T,但operator[]需要T。编译器应该如何推断它?魔法? -
那么我应该如何将 ["param"] 替换为...?
标签: c++ templates boost operator-overloading c++03