Tôi tự hỏi nếu loại có thể được xác định là thông tin thời gian chạy trong C++.thời gian chạy xác định loại cho C++
(1) Mặc dù câu hỏi của tôi là khá chung chung, vì đơn giản, tôi sẽ bắt đầu từ một ví dụ đơn giản:
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
}
cout << t << endl; // error: ‘t’ was not declared in this scope
return 0;
}
Đối với ví dụ này, có hai câu hỏi:
(a) "argv [1] đến t "là sai, nhưng có thể loại thông tin trong chuỗi C argv [1] được chuyển đổi sang từ khóa loại thực tế? Vì vậy, chúng ta không cần phải kiểm tra tất cả các loại theo mệnh đề if-else và strcmp.
(b) cách biến biến t được xác định bên trong phạm vi cục bộ của mệnh đề if vẫn hợp lệ bên ngoài. tức là cách "xuất" biến cục bộ ra bên ngoài phạm vi của nó?
(2) Nói chung, không cụ thể với ví dụ đơn giản ở trên, cách thông thường để xác định thời gian chạy là gì? Dường như với tôi rằng có thể có một số cách:
(a) người ta có thể đặt việc xử lý biến được xác định từ loại bên trong cùng phạm vi định nghĩa của nó. ví dụ.
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
cout << t << endl;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
cout << t << endl;
}
return 0;
}
Và có thể sử dụng chức năng mẫu để tạo mã chung cho nhiều loại có thể sử dụng lại.
(b) hoặc người ta có thể sử dụng loại lớp trừu tượng và đa hình để gián tiếp xuất định nghĩa ra, nhưng tôi không chắc chắn chính xác như thế nào.
Cảm ơn lời khuyên của bạn!
+1 Tôi sẽ đăng giải pháp đa hình. Làm cho ý nghĩa hơn nhiều so với boost.variant vì với boost.variant bạn cần phải kiểm tra kiểu cho mọi hoạt động. –