Trong đoạn mã sau, hàm tạo variadic được gọi hai lần. Làm thế nào tôi có thể nhận được constructor sao chép được gọi thay vì phiên bản đối số duy nhất của constructor variadic khi thích hợp?Làm thế nào để có được hàm tạo bản sao được gọi là trên một hàm tạo variadic?
#include <iostream>
struct Foo
{
Foo(const Foo &)
{
std::cout << "copy constructor\n";
}
template<typename... Args>
Foo(Args&&... args)
{
std::cout << "variadic constructor\n";
}
std::string message;
};
int main()
{
Foo f1;
Foo f2(f1); // this calls the variadic constructor, but I want the copy constructor.
}
Có một chút nữa, cụ thể là tham chiếu sụp đổ (gọi là?), Nghĩa là 'T &&&' => 'T &' bởi vì nếu không một giá trị ('f1') không thể liên kết với' T && '. –