Hicham Mouline wrote:
Hicham Mouline wrote:
Question1: With PP, I define constants c0 to c100, as non-const because I let the user initialize them to a integer variables or literals or floating point variables or literals. I don't understand, but it probably doesn't matter. PP is boost.preprocessor. I forgot attached files don't appear in the mailing list. template <unsigned int subscript> struct constant_tag {};
From: "Eric Niebler": proto::terminal< constant_tag<0> >::type c0 = {{}}; // with preprocessor, i define c0 ... c100 I don't want lib users, in a first use, to have to define constant names nor variable names themselves.
The attachments came through fine. What I don't understand is why you would want these globals to be non-const, but really that's your business. If it makes sense for your DSEL, then do it.
Does the non-constness matter? They are defined in a header file included by users of the library. You'll have linker trouble if two translation units include that header. You should define them in a .cpp file and mark them as extern in the header. Right. Could i define them const and still assign values (like arithmetic literals) to them later on?
No.
Queestion3: I made dimension_of a numerical metafunction with an embedded value member. OK, that's reasonable.
What is the convenience of making metafunctions numerical? I don't know what you're asking. I'm just asking about a general advice re whether to make metafunctions numerical whenever possible.
I see. Yes, it can be sometimes be convenient for metafunction that return MPL Integral Constants to have a nested ::value. <snip>
My next question is about my constants.
I want to allow this example of syntax:
c35 = any expression of integral or floating point literals, of c++ runtime variables of integral or fp type (no bool no enums) of _other_ constants
Later, a constant will be either undefined, or defined. if undefined, evaluations of expressions with that constant will keep that constant in, otherwise, the constant will be replaced by its value
How do I write the grammar that allows any expression, but just with those 4 possibilies (c35)?
I encourage you to try it yourself and mail back if you get stuck. There's lots of good information on writing grammars in the docs, and some complete examples that you can look at. -- Eric Niebler BoostPro Computing http://www.boostpro.com