Sử dụng CRTP đôi khi tôi viết một mã như thế này:Làm thế nào để tránh lỗi trong khi sử dụng CRTP?
// this was written first
struct Foo : Base<Foo, ...>
{
...
};
// this was copy-pasted from Foo some days later
struct Bar : Base<Foo, ...>
{
...
};
Và nó rất khó khăn để hiểu những gì sai, cho đến khi tôi theo dõi mã trong trình gỡ lỗi và thấy rằng các thành viên Bar không được sử dụng trong Base
.
Làm cách nào để hiển thị lỗi này khi biên dịch?
(tôi sử dụng MSVC2010, vì vậy tôi có thể sử dụng một số C++ 0x tính năng và mở rộng ngôn ngữ MSVC)
thực sự nó không hoạt động nếu dtor không bao giờ được gọi. – Abyx
@Abyx: Thật thú vị với gcc 4.9, nếu tôi sử dụng vị trí mới để xây dựng một đối tượng kiểu 'struct S: base {}', nó phàn nàn về hàm tạo * 'S :: S()' bị xóa hoàn toàn do '~ base' là riêng tư. Tuy nhiên trong trường hợp này destructor không bao giờ được gọi. –
Thú vị hơn, gcc 4.8.1 không phàn nàn gì cả! –