Tôi đang sử dụng xsd để tạo mã c + + từ tệp sơ đồ xml. Đối với một loại xml nhiều chức năng được tạo ra (cho serialization vv).
Nếu loại được gọi là XmlType nhiều chức năng của các hình thức sau đây được tạo ra:nhiều chức năng có cùng tên nhưng các loại đối số khác nhau như tham số mẫu
XmlType XmlType_(const XmlType& a, const string& b)
string XmlType_(const XmlType& a)
...
Đây là chức năng bình thường và không thành viên của XmlType và tất cả họ đều có cùng tên. Đối với XmlType2, các chức năng sẽ được gọi là XmlType2_.
Tôi muốn viết một lớp mẫu tiện ích cho tất cả các loại xml khác nhau của lược đồ xml của tôi. Các chức năng khác nhau sẽ được gọi là cái nhìn sâu sắc lớp này. Những gì tôi có cho đến nay là một cái gì đó như thế này:
template<typename T>
using TFunc1 = T (*)(const T&, const string&);
template<typename T>
using TFunc2 = string (*)(const T&);
template<typename T, TFunc1<T> func2, TFunc2<T> func2>
class XmlUtil {
...
};
Khi tạo một thể hiện của các XmlUtil lớp nếu phải làm điều đó như thế này:
XmlUtil<XmlType, XmlType_, XmlType_> util;
này cảm thấy một chút dư thừa và trở nên tồi tệ hơn , khi tôi phải chuyển nhiều hàm hơn làm tham số.
Tôi muốn sử dụng lớp util như thế này:
XmlUtil<XmlType, XmlType_> util;
hoặc thậm chí tốt hơn như thế này
XmlUtil<XmlType> util;
Cách duy nhất tôi có thể nghĩ là bằng cách nào đó sử dụng xác định, nhưng nó doesn không cảm thấy đúng.
Có cách nào khác để thực hiện việc này không?
EDIT: Tôi đang sử dụng một định nghĩa bây giờ:
#define TRPL(name) name, name ## _, name ## _
...
XmlUtil<TRPL(XmlType)> util;
tôi sẽ chỉnh sửa này, nếu tôi tìm thấy một cái gì đó tốt hơn (có thể ghi đè lên bộ như Yakk gợi ý trong câu trả lời của mình).
Đây là C++ 11 cụ thể, tôi tin? –
Có, tôi đang sử dụng C++ 11 (MinGW với gcc 4.8). Đã thêm thẻ. – guini
chuyên môn về mẫu. Thực hiện tương đương với Func <> (trong C#) trong C++ bằng cách sử dụng nó trong đó Execute có một tham số mẫu thực hiện cụ thể và đếm đối số. Bằng cách sử dụng các thiết lập mặc định trong mẫu bạn có thể chọn để chỉ định nghĩa một số đối số kiểu. –