Trong nhiệm vụ sử thi C++ của tôi, hãy làm những việc không nên, tôi đang cố gắng tổng hợp một lớp thời gian biên dịch.Tạo mã C++
Dựa trên một định nghĩa preprocessor, chẳng hạn như (khái niệm thô)
CLASS_BEGIN(Name)
RECORD(xyz)
RECORD(abc)
RECORD_GROUP(GroupName)
RECORD_GROUP_RECORD(foo)
RECORD_GROUP_RECORD(bar)
END_RECORDGROUP
END_CLASS
Trong khi Tôi khá chắc chắn tôi tạo ra một lớp học mà đọc dữ liệu từ hệ thống tập tin sử dụng loại cấu trúc này (Thậm chí có thể làm việc đó bằng cách sử dụng Lập trình meta mẫu), tôi không thấy cách tôi có thể tạo cả hai hàm để truy cập dữ liệu và hàm để đọc dữ liệu.
tôi muốn kết thúc với một cái gì đó như thế này lớp
class Name{
public:
xyz_type getxyz();
void setxyz(xyz_type v);
//etc
list<group_type> getGroupName();
//etc
void readData(filesystem){
//read xyz
//read abc
//etc
}
};
Có ai có bất kỳ ý tưởng nếu điều này thậm chí còn có thể?
--EDIT--
Để làm rõ mục đích sử dụng cho mục đích này. Tôi có tệp ở định dạng chuẩn mà tôi muốn đọc. Định dạng đã được định nghĩa rồi, do đó, nó không mở để thay đổi. Mỗi tệp có thể chứa bất kỳ bản ghi số nào, mỗi bản ghi có thể chứa bất kỳ bản ghi phụ số nào.
Nhiều loại bản ghi chứa từng loại bản ghi phụ khác nhau, nhưng chúng có thể được xác định. Vì vậy, ví dụ bản ghi Heightmap phải chứa một Heightmap, nhưng có thể tùy chọn chứa các normals.
Vì vậy, tôi muốn xác định một bản ghi cho rằng như vậy:
CLASS_BEGIN(Heightmap)
RECORD(VHDT, Heightmap, std::string) //Subrecord Name, Readable Name, Type
RECORD_OPTIONAL(VNML, Normals, std::string)
END_CLASS
Đối với mà tôi muốn ra cái gì đó với các chức năng của một lớp học như thế này:
class Heightmap{
public:
std::string getHeightmap(){
return mHeightmap->get<std::string>();
}
void setHeightmap(std::string v){
mHeight->set<std::string>(v);
}
bool hasNormal(){
return mNormal != 0;
}
//getter and setter functions for normals go here
private:
void read(Record* r){
mHeightmap = r->getFirst(VHDT);
mNormal = r->getFirst(VNML);
}
SubRecord* mHeightmap, mNormal;
}
Vấn đề này Tôi đang có là tôi cần mỗi định nghĩa tiền xử lý hai lần. Một lần để xác định định nghĩa hàm trong lớp và một lần để tạo hàm đọc. Vì bộ tiền xử lý hoàn toàn có chức năng, tôi không thể đẩy dữ liệu vào hàng đợi và tạo lớp trên định nghĩa marco END_CLASS.
Tôi không thể nhìn thấy một cách giải quyết vấn đề này, nhưng tự hỏi liệu có ai hiểu rõ hơn về C++ không.
Có thể, tôi nghi ngờ. Bạn có thể chính xác hơn về nơi bạn đang va vào tường? –
Nó không rõ ràng những lợi thế bạn đạt được từ việc này - xin vui lòng giải thích. –