2012-03-22 42 views
5

Tôi cố gắng để sử dụng một số mẫu mã và trình biên dịch của tôi sẽ không biên dịch dòng này:Bool <true> trong C++ là gì?

static void exitActions(Host& h, Bool<true>) {} 

Compiler là MS VS2005. Tôi không nhận ra Bool - vì vậy không chắc chắn làm thế nào để thay thế nó. Thông số mặc định này có tương đương hay không:

static void exitActions(Host& h, bool b = true) {} 

Mẫu này là từ http://accu.org/index.php/journals/252. Mã chỉ là đoạn trích trong văn bản - không có đoạn trích về nội dung # include'd - rất khó để giải quyết. Không có định nghĩa cho mẫu Bool.

+1

Bool là một loại, và excitActions có lẽ quá tải dựa trên loại này. Bạn có thể thêm thông báo lỗi mà bạn đang xem cho câu hỏi không? – Marcin

+0

Vâng, bất kỳ tham chiếu nào trong 'exitActions' đến đối số bool có lẽ sẽ bị sai lầm. Nếu bạn thay đổi tất cả các tham chiếu đến kiểu 'bool', có thể bạn sẽ không thấy mọi thứ bị hỏng, nhưng hãy nghĩ đây là câu trả lời sơ bộ cho đến khi có một số câu trả lời thông minh hơn. – prelic

+0

điều gì xảy ra khi bạn đặt con trỏ trên 'Bool ' và sử dụng "Chuyển đến định nghĩa"? – Naveen

Trả lời

5

Tôi đoán Bool được định nghĩa như

template <bool B> struct Bool{}; 

Bạn có thể sử dụng đối với một số mô hình kết hợp thô sơ:

void exitActions(Bool<true>) { std::cout << "called with true\n"; } 
void exitActions(Bool<false>) { std::cout << "called with false\n"; } 

int main() 
{ 
    exitActions(Bool<true>()); // prints "called with true" 
    exitActions(Bool<false>()); // prints "called with false" 
} 

Điều này tất nhiên chỉ có ý nghĩa nếu bạn quá tải Bool<true> với Bool<false>. Nhưng trong nguồn http://accu.org/index.php/journals/252 (được Marcin đoán), đây là trường hợp.

Ngoài ra còn có một chức năng cuộc gọi tương tự

Tran<T,S,T>::entryActions(host_, Bool<false>()); 
+0

Sử dụng định nghĩa này cho phép tôi biên dịch chương trình, cảm ơn bạn. Có tên cho kiểu lập trình này hay liên kết web không. Nó giống như một chức năng quá tải? Một hay khác được gọi là phụ thuộc vào việc bạn vượt qua đúng hay sai tôi đoán? Như bạn nói nó chỉ thực sự có ý nghĩa trong bối cảnh phần còn lại của mã - tôi sẽ nghiên cứu nó nhiều hơn. –

+0

Tôi chưa bao giờ thấy rằng trước đây trong C++ (trong các ngôn ngữ lập trình khác, điều này được gọi là khớp mẫu, như đã được viết). Thông thường bạn sẽ viết một cái gì đó như 'template <> void exitActions () {...}' và 'template <> void exitActions () {...}'. Nhưng vì điều này thường được sử dụng nên anh ta có thể quyết định rút ngắn điều đó bằng cách giới thiệu loại 'Bool' này. – ipc

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