Передайте смешанные ссылки на функцию: значение для небольших типов и ссылка на большие типыC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Передайте смешанные ссылки на функцию: значение для небольших типов и ссылка на большие типы

Сообщение Anonymous »

Я хочу определить шаблонную функцию, которая допускает параметры по значению только тогда, когда они «дешево копировать», и по ссылке, когда они не являются.char c = 'k';
F(c); // A)
F(std::move(c)); // B)

для передачи value в a) и передаваемой справочностью rvalue в b) . В случае объявления c как const , переменная передается по значению в обоих случаях.
Однако для дорогих типов, таких как std :: vector , я хочу variable v в

void func(value_t&&)
{
static_assert(std::is_same_v);
std::print("Expensive\n");
}

int main()
{
{
char k = 'a';
func(k);
}
{
char k = 'a';
func(std::move(k));
}
{
const char k = 'a';
func(k);
}

{
std::vector v{1, 2, 3, 4};
func(v);
}
{
std::vector v{1, 2, 3, 4};
func(std::move(v));
}
{
const std::vector v{1, 2, 3, 4};
func(v);
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... e-for-larg
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»