2011-12-13 37 views

Trả lời

2

Các Wikibooks article on Expression Templates cung cấp cái nhìn sâu sắc hơn, đặc biệt là phần cuối cùng:

Ví dụ trên không hiển thị như thế nào loại đệ quy được tạo ra tại thời gian biên dịch. Ngoài ra, expr không giống như một biểu thức toán học ở tất cả, nhưng nó thực sự là một. Đoạn mã sau đây cho thấy cách các kiểu được đệ quy bao gồm việc sử dụng lặp đi lặp lại của toán tử + bị quá tải.

template< class A, class B > 
DExpression<DBinaryExpression<DExpression<A>, DExpression<B>, Add> > 
operator + (DExpression<A> a, DExpression<B> b) 
{ 
    typedef DBinaryExpression <DExpression<A>, DExpression<B>, Add> ExprT; 
    return DExpression<ExprT>(ExprT(a,b)); 
} 

Trên đây quá tải toán tử + làm hai điều - đó thêm đường cú pháp và cho phép thành phần kiểu đệ quy, được giới hạn bởi giới hạn của trình biên dịch. Do đó, có thể được sử dụng để thay thế các cuộc gọi để đánh giá như sau:

evaluate (a.begin(), a.end(), x + l + x); 
/// It is (2*x + 50.00), which does look like a mathematical expression. 
+0

là nó có thể cho bạn cung cấp một ví dụ chạy mã trong http://en.wikipedia.org/wiki/Expression_templates? Làm thế nào để làm cho nó hoạt động trong trường hợp này? Cảm ơn bạn. –

Các vấn đề liên quan