我试图理解boost递归变量和模板。对于下面的代码,我得到编译错误
cannot convert argument 1 from 'std::vector<std::string,std::allocator<_Ty>>' to 'const Boost::variant<boost::detail::variant::recursive_flag<T0>,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19> &'
错误似乎源于GetVarValue()
函数
根据我的承诺,我可以使用_default类:可以是int,string,bool,double的向量,int / string / bool / double的向量对吗?
typedef boost::make_recursive_variant<
int,
std::string,
bool,
double,
std::vector<boost::recursive_variant_> >::type TokenValueType;
template<class T>
class VectorToken : public Token
{
private:
string _name;
vector<T> _default;
public:
VectorToken(string name, vector<T> defaultVal)
: _name(name)
{
_default = defaultVal;
}
virtual TokenValueType GetVarValue()
{
return _default; <-- _default (vector<string>) doesn't like TokenValueType ?
}
};
main()
{
vector<string> tempvec = {"ABC", "LMN", "PQR"};
VectorToken<string> t4 = VectorToken<string>::VectorToken("VECTORSTR", tempvec);
}
当我像这样写主要时,错误就消失了:
main()
{
vector<TokenValueType> tempvec = { string("ABC"), string("LMN"), string("PQR") };
VectorToken<TokenValueType> t4 = VectorToken<TokenValueType>::VectorToken("VECTORSTR", tempvec);
}
答案 0 :(得分:0)
我将简化这种类型:
typedef boost::make_recursive_variant<
int,
std::string,
std::vector<boost::recursive_variant_> >::type TokenValueType;
这应该足以解释它。
TokenValueType
不是变量(int的向量,字符串的向量,TokenValueType的向量的向量)。
它是一个向量(int或string或TokenValueType)。
以下是MCVE,其中您的语法错误已更正并且更改了一行:
return std::vector<TokenValueType>(_default.begin(), _default.end());