Tôi có một vài lớp mẫu Impl
(với một số phương pháp trừu tượng) được thực hiện một phần trong các tập tin CPP vì vậy mà tôi cần phải nhanh chóng một cách rõ ràng các mẫu của tôi cho các mối liên kết để tìm thấy nó, như thế này:Explicit mẫu instantiation với các mẫu variadic
template class Impl<T0>;
template class Impl<T1>;
template class Impl<T2>;
...
template class Impl<Tx>;
Khi số loại Tx
tăng lên, tôi muốn tìm một cách tốt hơn là mở rộng theo cách thủ công các danh sách các cảnh báo rõ ràng này trong tất cả các tệp cần thiết. Tôi nghĩ tôi có thể sử dụng các mẫu variadic cho điều này, vì vậy tôi thử như sau:
template <template <class> class, class...>
struct type_map;
template <template <class> class BaseT, class... Ts>
struct type_map<BaseT, std::tuple<Ts...>> {
using type = std::tuple<BaseT<Ts>...>;
};
typedef std::tuple<T0, T1, T2> MyTypes;
Và trong file CPP:
template class type_map<Impl, MyTypes>;
Tuy nhiên, điều này đã không nhanh chóng các mẫu như tôi dự định (các linker phàn nàn về các ký hiệu còn thiếu).
Có cách nào để làm cho phương pháp này hoạt động (tức là tạo mẫu mà không khởi tạo đối tượng của nó) hoặc cách tiếp cận hoàn toàn khác có thể giải quyết được sự cố của tôi trong trường hợp này không?
bạn có cố gắng tạo dll không? có lẽ bạn phải thêm macro xuất khẩu vào loại 'type_map' của bạn –
@Angew Tôi có một số lớp hoạt động như vậy, đó là lý do cho vấn đề của tôi. Tôi đã cố gắng xây dựng câu hỏi của mình một chút rõ ràng hơn. – fschoenm
@vlad_tepesch Không, tôi không sử dụng DLL. Điều này chỉ liên quan đến vấn đề mà trình biên dịch không tạo ra các cá thể mẫu cần thiết trên các đơn vị biên dịch khác. – fschoenm