С переходом на новый стандарт (С++11) я подумал, что могу код существенно упростить и отказаться от явного использования некоторых магических констант, например числа 6 из приведённого выше кода.
Написал так:
// file Commands.cppnamespace
{
template<class... A>
inline std::array<char, sizeof...( A )> CreateCommand(A&&... a)
{
std::array<char, sizeof...( A )> arr = {{ static_cast<char>( a )... }};
.....
assert(IsValidCommand(arr));
return arr;
}
}
namespace AAAPops
{
const auto COMMAND_70 = CreateCommand('\x33', '\x70', '\x30', '\x31', '\x32', '\x55');
}
И стало, вроде бы, хорошо — от константы 6 удалось избавится. Но... Но что теперь написать в Commands.hpp?
На
extern const auto COMMAND_70;
компилятор ругается.
Здравствуйте, B0FEE664, Вы писали:
BFE>от константы 6 удалось избавится
А вот и нет. Просто раньше она у вас задавалась в явном виде, а теперь — в неявном, в виде количества параметров в функцию инициализации.
Я бы даже назвал это шагом назад, так как если кто-то передаст туда 5 параметров, то теперь ошибки не будет.
Мне проблема видится в повальной копипасте boost::array<char, 6>. Сделайте один using и будет вам счастье.
И вообще зачем городить такой былинный шаблон для инициализации массива из 6 char? А еще потом люди удивляются, что C++ считают излишне сложным. KISS
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Здравствуйте, VTT, Вы писали:
BFE>>от константы 6 удалось избавится VTT>А вот и нет. Просто раньше она у вас задавалась в явном виде, а теперь — в неявном, в виде количества параметров в функцию инициализации. VTT>Я бы даже назвал это шагом назад, так как если кто-то передаст туда 5 параметров, то теперь ошибки не будет.
Длина массива определяется числом байт, а не наоборот.
К тому же assert(IsValidCommand(arr)) тем не просто так стоит.
VTT>Мне проблема видится в повальной копипасте boost::array<char, 6>. Сделайте один using и будет вам счастье.
using чего надо сделать?
VTT>И вообще зачем городить такой былинный шаблон для инициализации массива из 6 char?
где t_Command — это шаблонный класс, который наследует от того же ::boost::array нужной размерности, и сам инициализирует массив переданными в шаблоне параметрами, проверяя их на валидность
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.