c++0x - задачка для variadic templates
(Эта тема расположена в архиве и закрыта для обсуждения.)

Версия для печати (дайджест по поиску " femidav")

Конференция: Конференция iXBT.com (http://forum.ixbt.com/)
Форум: Программирование (http://forum.ixbt.com/?id=26)
URL: http://forum.ixbt.com/topic.cgi?id=26:40677



3. femidav, 27.08.2010 00:15
код:

#include <tuple>
#include <iostream>

template<typename T>
class Field
{
T value_;
public:
Field(const T& value) : value_(value) {}
const T& get() const { return value_; }
};

template<typename... Fields>
class Message : public std::tuple<Fields...>
{
public:
Message() : std::tuple<Fields...>() {}
Message(const Fields&... fields) : std::tuple<Fields...>(fields...) {}

template<typename... UFields>
Message(UFields&&... fields)
: std::tuple<Fields...>(std::forward<UFields>(fields)...) {}

template<std::size_t index>
const Field<typename std::tuple_element<index, std::tuple<Fields...>>::type>
get() const { return std::get<index>(*this); }
};

int main()
{
Message<int, std::string, int> msg = { 42, "Answer", 21 };
std::cout << msg.get<0>().get() << "\n";
std::cout << msg.get<1>().get() << "\n";
std::cout << msg.get<2>().get() << "\n";
}

6. femidav, 27.08.2010 21:49
rGlory
Как оказалось, std::tuple несколько неудобны в использовании
А можно поподробнее?

9. femidav, 14.09.2010 06:15
ivanhoe
Ещё нет, но наверно в скором времени заюзаю. Но это чисто gcc-проект.

И каковы нынче ожидаемые сроки выхода нового стандарта?
Ещё год минимум.



URL: http://forum.ixbt.com/topic.cgi?id=26:40677