Рассмотрим следующий код:вперед элемент кортежа
template <unsigned int Index, class Tuple, class Type = /* Something1 */>
Type forward(Tuple&& tuple)
{
return /* Something2 */;
}
Я хотел бы найти то, что является правильным синтаксис /* Something1 */
и /* Something2 */
для того, чтобы направить элемент, указанный Index
входа tuple
. Я знаю, что другие понятия/синтаксис будет доступны, но для того, чтобы понять правильно, как вещи работают в таком контексте (рассматривать это как академический exercice), я хотел бы получить ответ, удовлетворяющий следующие условия:
- нет перегрузки для различных случаев: там будет только одна шаблонный функция
forward
- никаких изменений, кроме
/* Something1 */
и/* Something2 */
(и, возможно, на возвращаемый тип, если оно должно бытьType&&
вместоType
) - метапрограммированием crazyness,
decltype
иstd::declval
принимаются
Например, если Tuple = std::tuple<char, int, double>
, то forward<2>(tuple)
должен направить третий элемент (если кортеж передаются в качестве константной ссылки, то функция должна возвращать константную ссылку на double
).
Не могли бы вы уточнить, если в вашем примере вы хотите 'type' быть' double' или '' двойной &&? Я вижу, что ваш вопрос действительно задает этот вопрос, но вы можете проектировать свой API. Возможно, вы могли бы рассказать нам, что вы хотите от этого API. –
@Howard: Не должно быть 'double' или' double & 'для lvalue' tuple'? – Xeo
@ DieterLücking: это не домашнее задание, я работаю над суперкомпьютером ... это «я хочу быть уверенным, чтобы понять, что здесь происходит, и лучший способ сделать это - использовать академический подход» – Vincent