আপনি নিম্নলিখিত ম্যাক্রোটি চেষ্টা ও সংজ্ঞায়িত করতে পারেন:
#define for_range(_type, _param, _A1, _B1) for (bool _ok = true; _ok;)\
for (_type _start = _A1, _finish = _B1; _ok;)\
for (int _step = 2*(((int)_finish)>(int)_start)-1;_ok;)\
for (_type _param = _start; _ok ; \
(_param != _finish ? \
_param = static_cast<_type>(((int)_param)+_step) : _ok = false))
এখন আপনি এটি ব্যবহার করতে পারেন:
enum Count { zero, one, two, three };
for_range (Count, c, zero, three)
{
cout << "forward: " << c << endl;
}
এটি স্বাক্ষরবিহীন, পূর্ণসংখ্যা, এনাম এবং চরগুলির মাধ্যমে পিছন এবং সম্মুখের দিকে পুনরাবৃত্তি করতে ব্যবহৃত হতে পারে:
for_range (unsigned, i, 10,0)
{
cout << "backwards i: " << i << endl;
}
for_range (char, c, 'z','a')
{
cout << c << endl;
}
এর বিশ্রী সংজ্ঞা থাকা সত্ত্বেও এটি খুব ভালভাবে অনুকূলিত হয়েছে। আমি ভিসি ++ এ বিচ্ছিন্নতার দিকে তাকালাম। কোডটি অত্যন্ত দক্ষ। বিবৃতি দেওয়ার জন্য তিনটি বাদ দেওয়া হবে না: সংকলক অপ্টিমাইজেশনের পরে কেবল একটি লুপ তৈরি করবে! আপনি বদ্ধ লুপগুলি সংজ্ঞায়িত করতে পারেন:
unsigned p[4][5];
for_range (Count, i, zero,three)
for_range(unsigned int, j, 4, 0)
{
p[i][j] = static_cast<unsigned>(i)+j;
}
আপনি স্পষ্টতই গণ্যমানের মাধ্যমে পুনরাবৃত্তি করতে পারবেন না।