godlike Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Ετοιμάζω ένα αρθράκι για C++11 και έχω γράψει ένα code sample το οποίο αναρωτιέμαι εάν δουλεύει σε M$ C++ compiler. Καθότι δεν έχω windows (και άρα visual studio) θα ήθελα να ρωτήσω εάν μπορεί κάποιος να διαθέσει 2' να το κάνει compile. Ευχαριστώ εκ των προτέρων! Υ.Γ. 1: Πρέπει με κάποιο τρόπο να είναι ενεργά τα features του C++11 Υ.Γ. 2: Μην ανησυχείτε, ο κώδικας δεν είναι επιβλαβής. Όποιος τον διαβάσει θα καταλάβει >#include <iostream> #include <string> #include <stdexcept> /// XXX template<typename TData> struct VirtualVisit { virtual void visit(const TData&) = 0; }; // Forward declaration of DataParameter template<typename TData, typename TParameter> class DataParameter; // Forward declaration of ParameterConstVisitor template<typename TParameter, typename... Types> struct ParameterConstVisitor; // Specialized for 1 and many template<typename TParameter, typename First, typename... Types> struct ParameterConstVisitor<TParameter, First, Types...> : ParameterConstVisitor<TParameter, Types...>, VirtualVisit<DataParameter<First, TParameter>> { using VirtualVisit<DataParameter<First, TParameter>>::visit; }; // Specialized for one template<typename TParameter, typename First> struct ParameterConstVisitor<TParameter, First> : VirtualVisit<DataParameter<First, TParameter>> { using VirtualVisit<DataParameter<First, TParameter>>::visit; }; /// XXX template<typename... Types> class Parameter { public: typedef Parameter<Types...> Self; typedef ParameterConstVisitor<Self, Types...> ConstVisitor; /// XXX Parameter(const char* name_) : name(name_) {} /// XXX virtual ~Parameter() {} template<typename T> void set(const T& x) { checkValuType<T>(); static_cast<DataParameter<T, Self>&>(*this).set(x); } /// Get the parameter's value template<typename T> const T& get() const { checkValuType<T>(); return static_cast<const DataParameter<T, Self>&>(*this).get(); } virtual void accept(ConstVisitor&) const = 0; public: template<typename... TTypes> struct CheckValueVisitorSub; template<typename First, typename... TTypes> struct CheckValueVisitorSub<First, TTypes...>: CheckValueVisitorSub<TTypes...> { void visit(const First&) {} }; template<typename First> struct CheckValueVisitorSub<First>: ConstVisitor { bool b; CheckValueVisitorSub() : b(false) {} void visit(const First&) {} }; typedef CheckValueVisitorSub<DataParameter<Types, Self>...> CheckValueVisitor; private: std::string name; ///< XXX template<typename ValueType> void checkValuType() const { typedef DataParameter<ValueType, Self> DpType; typename DpType::MyCheckValueVisitor cvv; accept(cvv); if(!cvv. { throw std::runtime_error("Incorrect parameter type"); } } }; /// XXX template<typename TData, typename TParam> class DataParameter: public TParam { public: typedef TData Data; typedef TParam Base; typedef DataParameter<Data, Base> Self; typedef typename Base::ConstVisitor ConstVisitor; struct MyCheckValueVisitor: Base::CheckValueVisitor { typedef typename Base::CheckValueVisitor MyCheckValueVisitorBase; void visit(const Self&) { MyCheckValueVisitorBase::b = true; } }; DataParameter(const char* name, const Data& x) : Base(name), data(x) {} void accept(ConstVisitor& v) const { v.visit(*this); } /// Set the value. If it points to const data then copy void set(const Data& x) { data = x; } const Data& get() const { return data; } private: Data data; }; typedef Parameter<float, std::string, int> MyParameter; typedef DataParameter<float, MyParameter> FloatParameter; typedef DataParameter<std::string, MyParameter> StringParameter; typedef DataParameter<int, MyParameter> IntParameter; int main(int, char**) { MyParameter* p = new FloatParameter("f", 1.2); //p->set(std::string("Error")); p->set(10.0f); std::cout << p->get<float>() << std::endl; return 0; }
παπι Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 [table] Error 1 error C2143: syntax error : missing ',' before '...' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 40 1 test Error 2 error C2143: syntax error : missing ',' before '...' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 45 1 test Error 3 error C2065: 'Types' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 46 1 test Error 4 error C2143: syntax error : missing ',' before '...' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 46 1 test Error 5 error C2065: 'Types' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 47 1 test Error 6 error C2143: syntax error : missing ',' before '...' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 47 1 test Error 7 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 49 1 test Error 8 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 51 1 test Error 9 error C2975: 'ParameterConstVisitor' : invalid template argument for 'unnamed-parameter', expected compile-time constant expression e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 57 1 test Error 10 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 58 1 test Error 11 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 60 1 test Error 12 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 66 1 test Error 13 error C2065: 'Self' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 69 1 test Error 14 error C2065: 'Types' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 69 1 test Error 15 error C2143: syntax error : missing ',' before '...' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 69 1 test Error 16 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 74 1 test Error 17 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 78 1 test Error 18 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 82 1 test Error 19 error C2065: 'T' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 84 1 test Error 20 error C2065: 'Self' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 84 1 test Error 21 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 85 1 test Error 22 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 90 1 test Error 23 error C2065: 'T' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 92 1 test Error 24 error C2065: 'Self' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 92 1 test Error 25 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 93 1 test Error 26 error C2065: 'TTypes' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 102 1 test Error 27 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 104 1 test Error 28 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 106 1 test Error 29 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 107 1 test Error 30 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 111 1 test Error 31 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 116 1 test Error 32 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 119 1 test Error 33 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 120 1 test Error 34 error C2065: 'Types' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 122 1 test Error 35 error C2065: 'Self' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 122 1 test Error 36 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 129 1 test Error 37 error C2065: 'ValueType' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 130 1 test Error 38 error C2065: 'Self' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 130 1 test Error 39 error C2653: 'DpType' : is not a class or namespace name e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 131 1 test Error 40 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 134 1 test Error 41 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 136 1 test Error 42 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 137 1 test Error 43 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 138 1 test Error 44 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 144 1 test Error 45 error C2065: 'Data' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 148 1 test Error 46 error C2065: 'Base' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 148 1 test Error 47 error C2653: 'Base' : is not a class or namespace name e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 149 1 test Error 48 error C2653: 'Base' : is not a class or namespace name e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 151 1 test Error 49 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 152 1 test Error 50 error C2653: 'Base' : is not a class or namespace name e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 153 1 test Error 51 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 156 1 test Error 52 error C2653: 'MyCheckValueVisitorBase' : is not a class or namespace name e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 157 1 test Error 53 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 158 1 test Error 54 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 159 1 test Error 55 error C2065: 'x' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 162 1 test Error 56 error C3861: 'data': identifier not found e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 162 1 test Error 57 error C2143: syntax error : missing ',' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 163 1 test Error 58 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 163 1 test Error 59 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 166 1 test Error 60 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 168 1 test Error 61 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 173 1 test Error 62 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 175 1 test Error 63 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 178 1 test Error 64 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 180 1 test Error 65 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 184 1 test Error 66 error C2947: expecting '>' to terminate template-argument-list, found '>' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 187 1 test Error 67 error C2923: 'ParameterConstVisitor' : 'std::string' is not a valid template type argument for parameter 'TParameter' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 187 1 test Error 68 error C2975: 'ParameterConstVisitor' : invalid template argument for 'unnamed-parameter', expected compile-time constant expression e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 187 1 test Error 69 error C2065: 'MyParameter' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 188 1 test Error 70 error C2065: 'MyParameter' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 189 1 test Error 71 error C2065: 'MyParameter' : undeclared identifier e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 190 1 test Error 72 error C2143: syntax error : missing ',' before ')' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 193 1 test Error 73 error C2143: syntax error : missing ';' before '{' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 194 1 test Error 74 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 203 1 test Error 75 error C2143: syntax error : missing ';' before '}' e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 204 1 test Error 76 error C1004: unexpected end-of-file found e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 204 1 test 77 IntelliSense: type name is not allowed e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 187 19 test 78 IntelliSense: too many arguments for class template "Parameter" e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 187 24 test 79 IntelliSense: expression must have pointer-to-class type e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 198 9 test 80 IntelliSense: expression must have pointer-to-class type e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 200 22 test 81 IntelliSense: type name is not allowed e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 200 29 test 82 IntelliSense: expected an expression e:\users\papi\documents\visual studio 2010\projects\test\test\test.cpp 200 36 test [/table]
iniohos Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Δοκιμασα αλλα δεν κανει compile. Βγαζει μηνυμα λαθους στην συνταξη πχ "template<typename TData, typename TParameter>" με μηνυμα πως θελει ":" μετα το "template". Αν και παιζει η πιθανοτητα λαθους απο μερους μου καθως δεν εχω ξαναχρησιμοποιησει την C++ και μπορει να εχω κανει λαθος στον τυπο του project. με προλαβανε....τα ιδια λαθη με το παπι επαιρνα.
migf1 Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Εφόσον δεν είσαι σε Windows, γιατί δεν δοκιμάζεις με τον gcc? http://gcc.gnu.org/projects/cxx0x.html (δες το link για versions με C++11 support) Π.χ.: http://gcc.gnu.org/g...x0x_status.html EDIT: Sorry, τώρα παρατήρησα πως ήθελες επί τούτου έλεγχο σε VS
georgemarios Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Εφόσον δεν είσαι σε Windows, γιατί δεν δοκιμάζεις με τον gcc? http://gcc.gnu.org/projects/cxx0x.html (δες το link για versions με C++11 support) Π.χ.: http://gcc.gnu.org/gcc-4.7/cxx0x_status.html Επείδη όπως λέει και στο 1ο πόστ, αναρωτιέται εάν δουλεύει σε M$ C++ compiler για την πληρότητα του άρθρου που γράφει
migf1 Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Επείδη όπως λέει και στο 1ο πόστ, αναρωτιέται εάν δουλεύει σε M$ C++ compiler για την πληρότητα του άρθρου που γράφει Ναι, το είδα μετά κι έκανα edit (γράφαμε μαζί).
godlike Δημοσ. 14 Δεκεμβρίου 2011 Μέλος Δημοσ. 14 Δεκεμβρίου 2011 Ευχαριστώ πολύ παιδιά. Με ποια έκδοση το κάνετε compile;;
iniohos Δημοσ. 14 Δεκεμβρίου 2011 Δημοσ. 14 Δεκεμβρίου 2011 Ευχαριστώ πολύ παιδιά. Με ποια έκδοση το κάνετε compile;; Microsoft Visual Studio 2010, Version 4.0.30319 RTMRel
godlike Δημοσ. 14 Δεκεμβρίου 2011 Μέλος Δημοσ. 14 Δεκεμβρίου 2011 Άκυρο τελικά παιδιά. Το visual studio 2010 δεν υποστηρίζει variadic templates. http://stackoverflow.com/questions/4763736/vs2010-c-variadic-template-example Ευχαριστώ πολύ τα παιδιά που προσπάθησαν να το κάνουν compile!!
godlike Δημοσ. 16 Δεκεμβρίου 2011 Μέλος Δημοσ. 16 Δεκεμβρίου 2011 Το πρώτο μέρος του άρθρου για όποιον ενδιαφέρεται: http://anki3d.org/cxx11-variadic-templates-part1
dop Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Για να μην ψάχνεστε κάθε φορα, στο http://wiki.apache.org/stdcxx/C++0xCompilerSupport έχει μια λίστα με το τι υποστηρίζει ο κάθε compiler.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα