Передайте смешанные ссылки на функцию: значение для небольших типов и ссылка на большие типы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

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