Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ετοιμάζω ένα αρθράκι για 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;
}

 

Δημοσ.

[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]

Δημοσ.

Δοκιμασα αλλα δεν κανει compile.

Βγαζει μηνυμα λαθους στην συνταξη πχ "template<typename TData, typename TParameter>" με μηνυμα πως θελει ":" μετα το "template".

Αν και παιζει η πιθανοτητα λαθους απο μερους μου καθως δεν εχω ξαναχρησιμοποιησει την C++ και μπορει να εχω κανει λαθος στον τυπο του project.

 

 

με προλαβανε....τα ιδια λαθη με το παπι επαιρνα. :rolleyes:

Δημοσ.

Εφόσον δεν είσαι σε 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 για την πληρότητα του άρθρου που γράφει

Δημοσ.

Επείδη όπως λέει και στο 1ο πόστ, αναρωτιέται εάν δουλεύει σε M$ C++ compiler για την πληρότητα του άρθρου που γράφει

 

Ναι, το είδα μετά κι έκανα edit (γράφαμε μαζί).

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...