прошу опытных товарищей подсказать как лучше реализовать шаблонную функцию. Предположим у меня есть такая структура:
struct MediaData
{
static void Init();
static boost::shared_ptr<MediaData> ConstructorWithTupleHandler(const boost::python::tuple& tuple);
static boost::shared_ptr<MediaData> ConstructorWithStringHandler(const std::string& str);
static std::string __str__(const MediaData& mediaData);
static std::string __repr__(const MediaData& mediaData);
static const size_t mediaDataLen = 1024;
BYTE* data();
private:
std::array<BYTE, mediaDataLen> m_mediaData;
};
Функция ConstructorWithTupleHandler имеет данную реализацию:
boost::shared_ptr<MediaData> MediaData::ConstructorWithTupleHandler(const boost::python::tuple& tuple)
{
auto mediaData = new MediaData;
for (size_t i = 0; i < min(boost::python::len(tuple), mediaDataLen); ++i)
{
mediaData->m_mediaData[i] = boost::python::extract<BYTE>(tuple[i]);
}
return boost::shared_ptr< MediaData >(mediaData);
}
Вопрос вот в чем: у меня имеется не одна структура подобной MediaData у которых различие в поле static const size_t mediaDataLen и в поле std::array m_mediaData. Расскажите пожалуйста, как можно для данной функции написать функцию - шаблон, чтобы избежать повторов в коде. Заранее благодарен за ответ.
Логичнее, на мой взгляд, это вынести в отдельный статический метод:
template<typename _DataStruct>
static boost::shared_ptr<_DataStruct> ConstructorWithTupleHandler(const boost::python::tuple& tuple)
{
auto data = _DataStruct::ArrayType();
for (size_t i = 0; i < min(boost::python::len(tuple), _DataStruct::DataLen); ++i)
data[i] = boost::python::extract<typename _DataStruct::ArrayType::value_type>(tuple[i]);
return boost::make_shared<_DataStruct>(std::move(data));
}
struct MediaData
{
static constexpr size_t DataLen = 1024;
using ArrayType = std::array<BYTE, DataLen>;
MediaData(ArrayType data) : m_mediaData(std::move(data)) {}
/*...*/
private:
ArrayType m_mediaData;
};
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Я хочу объявить тип long long double , но компилятор выдает ошибку, так как для него это все равно,что объявление int doubleМожно ли все-таки объявить...
Есть класс (не шаблонный и шаблонным его делать нельзя) с шаблонным конструктором:
Беру число из массива и перевожу в строку в связи с тем что работать надо с битами
У меня есть класс простого объекта, например man, с двумя полями name и ageИ мне нужно, чтоб при старте программы, считывался текстовый конфигурационный...