cuốn sách gpt4 ai đã làm

c++ - 允许/禁用模板的特定复制构造函数和赋值操作

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 07:12:05 29 4
mua khóa gpt4 Nike

Tôi tự hỏi liệu tôi có thể đạt được điều gì đó bằng cách sử dụng các mẫu hay không. Điều tôi muốn làm là cho phép "sao chép hàm tạo và toán tử gán" cụ thể từ mẫu này sang mẫu khác và vô hiệu hóa các mẫu khác.

Tôi nghĩ rằng tôi chỉ hoàn thành được một điều tôi muốn, vì vậy tôi đã cung cấp lớp học sau. Đối với hàm tạo bản sao hoặc toán tử gán, tôi muốn có thể thực hiện các thao tác sau

  • FooFooluôn luôn tốt
  • FooChỉ được phép sao chép hoặc gán cho Foo

Tôi không chắc liệu điều này có thể thực hiện được không...

#include 
#include
using namespace std;

mẫu
lớp học
{
static constexpr bool owner_ = Chủ sở hữu;

public:
Foo() {std::cout << "ctor\n";}
Foo operator=(const Foo& foo) { std::cout << "chuyển nhượng\n";}
Foo(const Foo& foo) { std::cout << "sao chép ctor \n" }

mẫu
Foo( const Foo& khác)
{
std::cout << "sao chép ctor2 \n";
}

mẫu
Foo& operator=( const Foo& other)
{
std::cout << "nhiệm vụ 2 \n";
return *this;
}

mẫu < bool B_ = Chủ sở hữu, tên chữ = std::enable_if_t >
thanh trống1 () {
std:cout << "bar1 " << owner_ << "\n";
}

void bar2() {std:cout << "bar2 " << owner_ << "\n";}
};

Điều duy nhất tôi đã thành công cho đến nay làtoán tử=sẽ được Foo công việc = Foo . FooFooKhông vấn đề gì, nhưng điều này cũng cho phép tất cả các chuyển đổi khác, vì vậy FooFoolà có thể.

câu trả lời hay nhất

Chắc chắn. Mọi thứ đều có thể có trong C++.

Câu hỏi của bạn không rõ ràng 100% về hành vi mong đợi đối với tất cả các kết hợp, nhưng điều này có thể dễ dàng tinh chỉnh:

#include 

// Lớp người trợ giúp

mẫu lớp ok_to_copy_foos;

// Xác định tất cả các chuyển đổi hợp lệ dưới dạng chuyên môn:

mẫu<>
lớp ok_to_copy_foos {

public:
kiểu bool typedef;
};

mẫu<>
lớp ok_to_copy_foos {

public:
kiểu bool typedef;
};

///////////////////////////////////////////////////////////////// //// ////////////////////

mẫu
lớp Foo {

public:

Foo() {}

mẫu::type>
Foo(const Foo &)
{
std::cout << "sao chép ctor \n";
}

mẫu::type>
Foo &operator=(const Foo &)
{
std::cout << "bài tập\n";

return *this;
}
};

khoảng trống foo()
{
Foo f1;
Foot1;

// Những cái này sẽ biên dịch:
Foo f2(f1);
f2=f1;
f2=t1;

// Những cái này sẽ không biên dịch
//
//t1=f2;
// Foo t2(f2);
}

EDIT: Có vẻ như bạn cũng cần thêm một hàm tạo bản sao và toán tử gán rõ ràng. Loại bỏ giá trị mặc định là không đủ:

Foo(const Foo &o)
{
tên kiểu ok_to_copy_foos::gõ giả;
}

Foo &operator=(const Foo &o)
{
tên kiểu ok_to_copy_foos::gõ giả;

return *this;
}

Về c++ - cho phép/vô hiệu hóa các hàm tạo bản sao cụ thể và các thao tác gán cho mẫu, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/39671377/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress