Tôi đang cố triển khai một hàm mẫu có các chốt điều khiển khác nhau bằng cách sử dụng chuyên môn mẫu.chuyên môn mẫu cho các hàm thành viên tĩnh; làm thế nào để?
Các mã sau đây mang lại cho tôi một "chuyên môn hóa rõ ràng trong phạm vi không gian tên" trong gcc:
template <typename T>
static T safeGuiCall(boost::function<T()> _f)
{
if (_f.empty())
throw GuiException("Function pointer empty");
{
ThreadGuard g;
T ret = _f();
return ret;
}
}
// template specialization for functions wit no return value
template <>
static void safeGuiCall<void>(boost::function<void()> _f)
{
if (_f.empty())
throw GuiException("Function pointer empty");
{
ThreadGuard g;
_f();
}
}
Tôi đã cố gắng di chuyển nó ra khỏi lớp (lớp không được templated) và vào namespace nhưng sau đó tôi nhận được lỗi "Chuyên sâu rõ ràng không thể có một lớp lưu trữ". Tôi đã đọc nhiều cuộc thảo luận về điều này, nhưng mọi người dường như không đồng ý làm thế nào để chuyên về các mẫu chức năng. Bất kỳ ý tưởng?
hm Tôi đã thử điều tương tự bây giờ, nhưng đặt nó trong một tập tin .hpp và cố gắng bao gồm nó ... sau đó tôi nhận được lỗi "nhiều định nghĩa của vodi X: ff (Kiểm tra ). Tôi không thể thấy điều gì sẽ –
Rolle
Đó có phải là lỗi trình biên dịch hoặc liên kết không?Nếu đó là lỗi trình biên dịch có nghĩa là bạn có thể bao gồm tiêu đề mẫu nhiều hơn một lần và các tiêu đề bảo vệ bị thiếu và do đó định nghĩa kép: trình biên dịch nhìn thấy hai định nghĩa chính xác để thực hiện. –
Tại sao tôi nên thêm nội tuyến cho trường hợp đầu tiên? Nếu không, tôi nhận được một lỗi biên dịch. – sop