2011-12-03 27 views
8

Áp dụng thế hệ vtable C++ có thể được thực hiện trong MSVC bằng cách sử dụng thuộc tính __declspec(novtable). Tuy nhiên, có vẻ như là there is no equivalent attribute cho trình biên dịch GNU C++. Thực tế là để lại vtables cho các lớp học ảo tinh khiết không cần thiết liên kết trong __cxa_abort() và nhiều người khác, và tôi muốn tránh điều này xảy ra bởi vì tôi đang lập trình cho một hệ thống nhúng. Vì vậy, tôi nên làm gì?Làm cách nào để loại bỏ thế hệ vtable C++ cho các lớp ảo thuần túy bằng G ++?

struct ISomeInterface 
{ 
    virtual void Func() = 0; 
}; 

class CSomeClass : public ISomeInterface 
{ 
    virtual void Func(); 
} 

void CSomeClass::Func() 
{ 
    //... 
} 

Trả lời

0

Cờ trình biên dịch -fno-rtti ngừng tạo thông tin kiểu thời gian chạy. Trong kinh nghiệm của tôi với C++ trên nền tảng nhúng, điều này đã ngăn chặn lỗi trình biên dịch vtable xảy ra, cho thấy nó ngăn cản chúng được tạo ra (và do đó, các chức năng ảo sẽ không hoạt động). Quay lại đầu trang |

Các vấn đề liên quan