Если вы хотите, чтобы ваш один класс работал с std::tuple_size
, вы можете просто указать специализацию:
namespace std
{
template<> struct tuple_size<TR_AgentInfo>
{
static const size_t value = 2;
// alternatively, `tuple_size<tuple<long long, string>>::value`
// or even better, `tuple_size<TR_AgentInfo::tuple_type>::value`, #1
};
}
Вам разрешено добавлять специализации в пространство имен std
, именно для таких ситуаций, как ваша.
Если ваш реальный класс сам по себе шаблонизирован, вы можете просто заменить 2
соответствующей конструкцией. Например, для предложения № 1 вы можете добавить typedef для tuple_type
в ваш класс. Есть много способов снять кожу с этой кошки.