2017-08-10 2 views
0

Ich versuche, bosch rekursive Variante und Vorlage zu verstehen. Für den folgenden Code, erhalte ich Kompilierungsfehler vonBoost rekursive Variante zusammen mit Vorlage C++

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> &'

Fehler von GetVarValue() Funktion als Ursprung scheinen

Wie pro meinem undertanding kann ich eine Klasse mit _default habe: der Vektor von int sein kann, string, bool, double, Vektor von int/string/bool/double right?

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); 
    } 

Der Fehler geht weg, wenn ich so schreibe Haupt:

main() 
{ 
    vector<TokenValueType> tempvec = { string("ABC"), string("LMN"), string("PQR") }; 
    VectorToken<TokenValueType> t4 = VectorToken<TokenValueType>::VectorToken("VECTORSTR", tempvec); 

} 

Antwort

0

ich diese Art vereinfachen:

typedef boost::make_recursive_variant< 
    int, 
    std::string, 
    std::vector<boost::recursive_variant_> >::type TokenValueType; 

Dies sollte genug sein, um es zu erklären.

TokenValueType ist nicht eine Variante über (Vektor von int, Vektor der Zeichenfolge, Vektor des Vektors von TokenValueType).

Es ist ein Vektor über (int oder Zeichenfolge oder TokenValueType). Hier

ist ein MCVE mit Syntaxfehler korrigiert und eine Zeile geändert:

return std::vector<TokenValueType>(_default.begin(), _default.end());