Hallo!C++ đơn mẫu chuyên môn với nhiều thông số mẫu
Tôi muốn chỉ chuyên về một trong hai loại mẫu. Ví dụ. template <typename A, typename B> class X
nên có triển khai đặc biệt cho một hàm duy nhất X<float, sometype>::someFunc()
.
Mẫu mã:
main.h:
#include <iostream>
template <typename F, typename I>
class B
{
public:
void someFunc()
{
std::cout << "normal" << std::endl;
};
void someFuncNotSpecial()
{
std::cout << "normal" << std::endl;
};
};
template <typename I>
void B<float, I>::someFunc();
main.cpp:
#include <iostream>
#include "main.h"
using namespace std;
template <typename I>
void B<float, I>::someFunc()
{
cout << "special" << endl;
}
int main(int argc, char *argv[])
{
B<int, int> b1;
b1.someFunc();
b1.someFuncNotSpecial();
B<float, int> b2;
b2.someFunc();
b2.someFuncNotSpecial();
}
Compilation không cho class B
. Có đúng, rằng điều này là không thể trong C + + theo cách này? Điều gì sẽ là giải pháp tốt nhất?
[sửa]
template <float, typename I> void B<float, I>::someFunc();
dẫn đến main.h: 26: lỗi: 'phao' không phải là một loại hợp lệ cho một tham số liên tục mẫu
template <typename I> void B<float, I>::someFunc();
dẫn đến main.h: 27: lỗi: sử dụng không hợp lệ loại không đầy đủ 'class B'
Và tôi đang sử dụng gcc.
[sửa]
Tôi không muốn chuyên toàn bộ lớp vì có các chức năng khác không có chuyên môn.
Mẫu lớp A có liên quan đến câu hỏi của bạn không? – Doug
Tôi nghĩ rằng nó sẽ làm cho câu hỏi dễ hiểu hơn. Tôi sẽ loại bỏ nó. – tauran
Điều này đã được hỏi hàng trăm lần trên stackoverflow :) Tôi nghĩ rằng một số người trong chúng ta có thể thiết lập một câu hỏi thường gặp mẫu thực với những câu hỏi như vậy. Mọi người có thể kiểm tra faq để xem câu hỏi của họ có được trả lời hay không, thay vì phải tìm kiếm một bản dupe. –