Giả sử tôi có một tập hợp các hàm và lớp được lập biểu để sử dụng độ chính xác đơn (float
) hoặc double
. Tất nhiên tôi có thể viết chỉ hai phần mã khởi động, hoặc lộn xộn với các macro. Nhưng tôi có thể chỉ chuyển đối số mẫu tại thời gian chạy không?Chọn đối số mẫu tại thời gian chạy trong C++
Trả lời
Không, bạn không thể chuyển đổi đối số mẫu khi chạy, vì các mẫu được trình biên dịch khởi tạo tại thời gian biên dịch. Những gì bạn thể làm là có cả các mẫu lấy được từ một lớp cơ sở chung, luôn luôn sử dụng các lớp cơ sở trong mã của bạn, và sau đó quyết định có nguồn gốc lớp để sử dụng trong thời gian chạy:
class Base
{
...
};
template <typename T>
class Foo : public Base
{
...
};
Base *newBase()
{
if(some condition)
return new Foo<float>();
else
return new Foo<double>();
}
Macros có cùng một vấn đề như mẫu, trong đó chúng được mở rộng tại thời gian biên dịch.
Mẫu là cơ chế biên dịch. BTW, macro cũng là (nói đúng - một cơ chế tiền xử lý - thậm chí trước khi biên dịch).
Mẫu hoàn toàn là cấu trúc thời gian biên dịch, trình biên dịch sẽ mở rộng mẫu và tạo lớp/chức năng của bạn với đối số được chỉ định và dịch trực tiếp mã đó.
Nếu bạn đang cố gắng chuyển đổi giữa foo<float>
và foo<double>
khi chạy, bạn sẽ cần phải sử dụng một số thủ thuật lập trình meta hoặc chỉ có đường dẫn mã riêng biệt cho mỗi.
- 1. Biến số SSIS tại thời gian chạy
- 2. Xác định các thông số mẫu trong thời gian chạy
- 3. Tại sao sử dụng performSelector: withObject: withObject tại thời gian chạy nếu bạn biết cả bộ chọn và đối số của nó tại thời gian biên dịch?
- 4. "Inlining" (loại) chức năng tại thời gian chạy trong C
- 5. C# Loại đúc tại thời gian chạy Sử dụng Reflection
- 6. Thời gian chạy chế nhạo trong C?
- 7. Tự động thêm thuộc tính C# tại thời gian chạy
- 8. Tạo tham số mẫu tại thời gian biên dịch
- 9. Tạo các lớp C# tại thời gian chạy
- 10. Đặt Clojure "hằng số" tại thời gian chạy
- 11. Thay đổi menu tại thời gian chạy
- 12. C# hợp nhất hai đối tượng với nhau tại thời gian chạy
- 13. C: Thông tin trình biên dịch tại thời gian chạy
- 14. Thay đổi App.config tại Thời gian chạy
- 15. Chạy PublicResXFileCodeGenerator tại thời gian biên dịch
- 16. C++ Biên dịch bù thời gian bên trong một mẫu
- 17. Kiểm tra xem hằng số có được xác định tại thời gian chạy theo Obj-C
- 18. Tìm tham chiếu đến đối tượng trong thời gian chạy
- 19. Tùy chọn để nhận dạng các đối tượng duy nhất trong thời gian chạy?
- 20. phương thức gọi tại thời gian chạy
- 21. Điều khiển bộ chọn thời gian mờ trong C# .NET?
- 22. Có thể xác định tại thời gian chạy là điểm trỏ đến lớp C++ hoặc tại lớp Objective-C?
- 23. C++, tạo các lớp trong thời gian chạy
- 24. Làm thế nào tôi có thể theo dõi một biến tại thời gian chạy trong C#?
- 25. thông số Passing để trang trí trong thời gian chạy
- 26. Tạo lắp ráp DLL động tại thời gian chạy
- 27. Thay đổi kích cỡ một THREE.CubeGeometry tại thời gian chạy
- 28. chọn nhiều ctrl + nút bấm tại thời điểm chạy
- 29. Tại sao ngoại lệ thời gian chạy "không được chọn" trong Java?
- 30. Kích thước của một đối tượng trong thời gian chạy