C++11
cung cấp user-defined literals. Tôi vừa mới bắt đầu chơi với họ, điều đó khiến tôi tự hỏi liệu có thể tự động thêm tất cả SI multipliers vào một chữ mà tôi định nghĩa không?Làm cách nào để tự động thêm định nghĩa theo nghĩa đen, dựa trên một chữ cái do người dùng xác định?
Ví dụ, nếu tôi xác định
Length operator "" _m(long double m) {
return Length(m); // Length in meters
}
nơi Length
là một lớp con của một số lớp Units
cơ sở, tôi muốn có một cơ chế để tự động add (theo tinh thần giống như boost operators) nhân SI cho tất cả các chữ mà trả về một Length
:
// these are added automatically when defining the literal "_m":
// Length in:
Length operator "" _Ym(long double Ym); // Yottameters
Length operator "" _Zm(long double Zm); // Zetameters
... // ...
... // ...
Length operator "" _km(long double km); // kilometers
Length operator "" _mm(long double mm); // millimeters
... // ...
... // ...
Length operator "" _zm(long double zm); // zeptometers
Length operator "" _ym(long double ym); // yoctometers
theo như tôi có thể thấy, ngoài việc có lẽ một số ma thuật vĩ mô, không có cách nào để làm một này tự động vì tất cả các chữ cái do người dùng xác định cần định nghĩa rõ ràng.
.. tôi có đang xem cái gì đó không?
Tại sao không phải với mẫu? –
@Adriano: ví dụ? –
Tương tự như này: http://www.codeproject.com/Articles/447922/Application-of-Cplusplus11-User-Defined-Literals-t (nếu bạn có thể bỏ qua các đơn vị đo lường phần và giữ nhân chỉ ... Tôi bỏ lỡ điểm đó, bạn nói đúng, chúng tôi có thể cần _macro magic_) –