phép nói rằng bạn có chức năng template đơn giản (không lớp thành viên vì lợi ích của sự đơn giản) với kiểu chuyên môn cụ thể trong file .h cùng ...Trình biên dịch có được phép bỏ qua nội tuyến trong trường hợp chuyên môn hóa mẫu không?
template <class TYPE>
void some_function(TYPE& val)
{
// some generic implementation
}
template <>
inline void some_function<int>(int& val)
{
// some int specific implementation
}
Trừ khi bạn rõ ràng hướng dẫn bạn trình biên dịch để inline
sự chuyên môn hóa (inline
từ khóa) bạn sẽ nhận được lỗi liên kết nếu tệp .h được bao gồm nhiều lần (ít nhất là tôi làm trong Visual C++ 2008).
Chúng ta đều biết rằng inline
chỉ là một gợi ý cho trình biên dịch, mà nó có thể bỏ qua. Trong trường hợp cụ thể này trình biên dịch được phép bỏ qua gợi ý này và để cho trình liên kết thất bại?
Đây là một trong những góc tối C++ khác. –
Đọc phần này: http://stackoverflow.com/questions/1759300/c-when-should-i-write-the-keyword-inline-for-a-function-method/1759575#1759575 –