2016-06-03 13 views
1

Hier ist die kleinere Version eines Anwendungsfalls, an dem ich gerade arbeite.boost :: mpl :: string size Fehlermeldungen

Verwendung gcc 4.9.3 gab mir folgende Fehlermeldungen.

source2.cpp:19:143: error: wrong number of template arguments (28, should be 16) 
using str = boost::mpl::string<'a','b','c','d','e','f','.','g','h','i','j','k','l','m','n','.','o','p','q','r','s','t','u','v','w','x','y','z'>; 
                                      ^
In file included from source2.cpp:16:0: 
/boost/include/boost/mpl/string.hpp:135:12: error: provided for ‘template<int C0, int C1, int C2, int C3, int C4, int C5, int C6, int C7, int C8, int C9, int C10, int C11, int C12, int C13, int C14, int C15> struct boost::mpl::string’ 
    struct string; 
      ^
source2.cpp: In function ‘int main()’: 
source2.cpp:23:48: error: ‘str’ was not declared in this scope 
    std::cout<<"String is "<<boost::mpl::c_str<str>::value<<std::endl; 
               ^
source2.cpp:23:51: error: template argument 1 is invalid 
    std::cout<<"String is "<<boost::mpl::c_str<str>::value<<std::endl; 

Ich habe bereits einen Haufen Fragen im Zusammenhang mit boost::mpl::string konsultiert und es hat mein Problem nicht lösen.

Warum gibt der Compiler mir Fehlermeldungen, auch wenn ich die Größe überschrieben habe?

Fehle ich etwas ziemlich offensichtlich?

Antwort

1

Sie müssen es als Multi-Zeichen-Konstante übergeben und die nicht mehr als 4 Bytes sein kann.

#include <boost/mpl/string.hpp> 
#include <iostream> 


using str1 = boost::mpl::string<'abcd','ef.g','hijk','lmn.','opqr','stuv','wxyz'>; 

int main() 
{ 
    std::cout<<"String is "<<boost::mpl::c_str<str1>::value<<std::endl; 
} 

UPDATE :: Das Makro BOOST_MPL_LIMIT_STRING_SIZE verwendet wird jede Vorlage Argument der Länge unter Berücksichtigung 4. Also in Ihrem Fall die erwartete String Größe ist number of template arguments * 4. Also sollte 128 ein guter Wert sein.

+0

Es scheint, dass ich nicht einmal 1, 2 oder 3 Bytes haben kann, d. H. 'A' oder' ab' oder 'abc' funktionieren nicht. Es muss "abcd" sein. :( – Recker

+0

@Recker Sie können, bis zu 4 Bytes. Ich bekomme keinen Fehler, wenn ich 'ab' oder 'abc'. Es ist nur diese Anzahl Ihrer Vorlage Parameter, wenn durch vier geteilt sollte nicht größer sein als BOOST_MPL_LIMIT_STRING_SIZE – Arunmu

+0

Nein Kein Glück für mich auf clang compiler 3.8 Ich versuche '<' a ',' ab ',' abc ',' abcd '> 'mit BOOST_MPL_LIMIT_STRING_SIZE als 128. Aber es kompiliert nicht mit' error: multi-character Zeichenkonstante. " – Recker