2

I have a code a following (simplified version):

#define MESSAGE_SIZE_MAX 1024
#defined MESSAGE_COUNT_MAX 20

class MyClass {
public:
   .. some stuff
private:
   unsigned char m_messageStorage[MESSAGE_COUNT_MAX*MESSAGE_SIZE_MAX];
};

I don't like defines, which are visible to all users of MyCalss.

How can I do it in C++ style?

Thanks Dima

2 Answers 2

7

Why don't you simply use a constant?

const int message_size_max = 1024;

Note that unlike C, C++ makes constant variables in global scope have static linkage by default.

The constant variable above is a constant expression and as such can be used to specify array sizes.

char message[message_size_max];
Sign up to request clarification or add additional context in comments.

2 Comments

It will be statically linked in all objects using MyClass and thus adding garbage to them.
If it does, then you have an ancient compiler or you're taking the constant's address somewhere.
6

The trick to get such things into the class definition is,

// public:
enum {MESSAGE_SIZE_MAX=1024, MESSAGE_COUNT_MAX=20};

I never liked #defines to be used like constants.
Its always a good practice to use enum.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.