Мне нужно реализовать некоторые методы, подобные vector::emplace
для моих собственных структур данных. В общем случае я бы реализовал их так, чтобы они поддерживали идеальную пересылку, то есть с rvalue-ссылками, std::forward
и т. Д.Совершенная пересылка примитивных типов
Однако, если я знаю, что все параметры для пересылки являются примитивными типами, такими как int
или float
. Имеет ли смысл внедрять идеальную пересылку для примитивных типов?
Другими словами, существует ли разница между следующими двумя фрагментами кода, предполагая, что мы используем только примитивные типы в качестве параметров шаблона?
template <typename... Args>
void wrapper(Args&& ... args) {
func(std::forward<Args>(args)...);
}
и
template <typename... Args>
void wrapper(Args ... args) {
func(args...);
}
Дополнительно: Есть ли разница, если мы знаем, что параметры шаблона могут быть только классы, которые содержат только примитивные типы? Или классы, содержащие только примитивные типы и другие классы, которые сами по себе содержат только примитивные типы?
Ваш «дополнительный» вопрос не имеет смысла. Игнорируя распределитель, простая реализация 'vector' содержит только три указателя. Предположительно, вы имеете в виду что-то о POD или тому подобное? –
Я не вижу, с чем связана реализация «std :: vector» с моим вопросом. В принципе, вопрос вообще не имеет отношения к векторам. «Дополнительный» вопрос просто: существует ли разница между обеими частями кода, если все параметры шаблона являются структурами/классами, которые содержат только примитивные типы в качестве членов. – user1494080
Вектор содержит три указателя, указатели являются примитивными типами, поэтому это «класс, который содержит только примитивные типы», но, очевидно, вам нужно идеально переслать вектор. –