extern const auto declaration
От: B0FEE664  
Дата: 25.09.15 11:04
Оценка:
Вот раньше я делал так:

// file Commands.hpp
namespace AAAPops
{
extern const boost::array<char, 6> COMMAND_70;
}


// file Commands.cpp
namespace
{
boost::array<char, 6> CreateCommand70(.......)
{
    boost::array<char, 6> arr;
    ....

    assert(IsValidCommand(arr));
    return arr;
}
}

namespace AAAPops
{
const boost::array<char, 6> COMMAND_70 = CreateCommand70(.......);
}



С переходом на новый стандарт (С++11) я подумал, что могу код существенно упростить и отказаться от явного использования некоторых магических констант, например числа 6 из приведённого выше кода.
Написал так:

// file Commands.cpp
namespace
{

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;
компилятор ругается.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.