powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / integer_sequence со смещением в качестве параметра std::get
5 сообщений из 5, страница 1 из 1
integer_sequence со смещением в качестве параметра std::get
    #39728612
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Есть класс, который принимает переменное количество аргументов и собирает их в кортеж для последующей обработки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
template<typename ...ArgsT>
class Example
{
public:
	Example(ArgsT...Args) : m_t(Args...)
	
private:
	std::tuple<ArgsT...> m_t;

public:
	decltype(auto) operator()(void) const
	{
		return Invoke(std::index_sequence_for<ArgsT...>{});
	}

	template <size_t... Indices>
	decltype(auto) Invoke(std::index_sequence<Indices...>) const
	{
		auto& Item1 = std::get<0>(m_t);
		
		// делаем что нам надо с параметром Item1 и забываем про него
		// остальные параметры из ArgsT отправляем дальше в виде (ArgsT + 1)... 
		// вот тут то вся и проблема
		
		// вот так можно отправить в полном виде, т.е. от 0 до size_t...(ArgsT) - 1
		return FinalStep(std::get</*? Indices + 1 ?*/>(m_t)...);
	}
	
	template<typename ...RestT>
	decltype(auto) FinalStep(RestT... Args) const
	{
		//	...	
	}
};


нашел шаблон строящий index_sequence со смещением
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
template <size_t O, size_t ... Is>
std::index_sequence<(O + Is)...> add_offset(std::index_sequence<Is...>)
{
    return {};
}

template <size_t O, size_t N>
auto make_index_sequence_with_offset()
{
    return add_offset<O>(std::make_index_sequence<N>{});
}


шаблон строится - все ок, но, если я его применяю,

то начинает материться std
автор1>test.main.cpp
1>...\msvc\14.15.26726\include\utility(542): error C2338: tuple index out of bounds
Выносить первый параметр отдельным typename T значением нельзя (считаем что невозможно по ТЗ)
Может здесь кто подскажет, как скрутить эту гниду, а то уже на второй день мозги плавятся и начинаю ходить кругами
--------------------------------------------------------------
o(O_O)o
...
Рейтинг: 0 / 0
integer_sequence со смещением в качестве параметра std::get
    #39728688
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На форум я прихожу не за ответами, а волшебством: стоит только написать о своей проблеме... и ты тут же ее сам решаешь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template <size_t... Indices>
decltype(auto) Invoke(std::index_sequence<Indices...>) const
{
	auto& Item1 = std::get<0>(m_t);
	// делаем что нам надо с параметром Item1 и забываем про него
	
	decltype(auto) OffsetIndicies = make_index_sequence_with_offset<1UL, sizeof...(ArgsT) - 1UL>();
	
	return FinalStep(OffsetIndicies);
}

template<size_t... Indicies>
decltype(auto) FinalStep(std::index_sequence<Indices...>) const
{
	return DoSomething(std::get<Indices>(m_t)...);	//  it finally works!
}


а дальше будет еще страшнее...
...
Рейтинг: 0 / 0
integer_sequence со смещением в качестве параметра std::get
    #39728725
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
integer_sequence со смещением в качестве параметра std::get
    #39728733
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знал, что у этого феномена даже есть какое-то научное обоснование (хотя начинал подозревать об этом),
думал просто - закон Мерфи: потратил хренову тучу времени, чтобы изложить свои мысли так, чтобы постороннему человеку было понятно, что ты от него хочешь, а потом - бац! да вот же оно!

столько времени впустую потратил, а оказывается сам смог до всего допереть...
только народ зря беспокоил
...
Рейтинг: 0 / 0
integer_sequence со смещением в качестве параметра std::get
    #39728935
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrum, не зря.

Ад ждет тебя!

И даже оттуда тебя будут вызывать аколиты, чтобы разобрать твои заклинания.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / integer_sequence со смещением в качестве параметра std::get
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]