2012-01-07 2 views
0

У меня была функция, которая используется, чтобы называтьсяstd :: набор константных ссылок?

void func(const A& v0, const A& v1, const A& v2); 

Для ясности, я хотел бы передать аргументы в качестве 3-кортежа. Каким образом можно избежать каких-либо дополнительных накладных расходов? Является ли следующее будет наиболее эффективным ?:

void func(std::tuple<const A&> v); 
+0

Я бы также передал кортеж в качестве ссылки на константу – Grizzly

+0

Являются ли полиморфными? Три из них часто используются вместе? –

+0

@BartoszMilewski: не полиморфный; часто используются вместе. – eudoxos

ответ

0

Если они не являются полиморфными и часто используются (и, я полагаю, создал) вместе, то почему бы вам не просто упаковать их в стоимость кортежа, std::tuple<A, A, A> , или названная структура. Вы передадите его по ссылке const. Это решение не имеет накладных расходов и, по сути, может быть быстрее.

На самом деле, поскольку все три элемента одного типа, почему бы вам не использовать массив из трех элементов, A[3]? Кортежи лучше подходят для гетерогенных типов.

+1

'std :: array ' ... но в любом случае тип должен быть typedef'd к дружественному, рефакторуемому имени. – Potatoswatter

+0

@Potatoswatter: Вы можете ввести массив в дружественное имя. Я не уверен, что вы подразумеваете под рефрактерностью. Не могли бы вы привести примеры кода с помощью кортежа и массива? –

Смежные вопросы