Các mã sau đây:C++: đặc tả từng phần của các lớp mẫu template
using namespace std;
template <typename X>
class Goo {};
template <typename X>
class Hoo {};
template <class A, template <typename> class B = Goo >
struct Foo {
B<A> data;
void foo1();
void foo2();
};
template <typename A>
void Foo<A>::foo1() { cout << "foo1 for Goo" << endl;}
int main() {
Foo<int> a;
a.foo1();
}
mang lại cho tôi một lỗi biên dịch:
test.cc:18: error: invalid use of incomplete type 'struct Foo<A, Goo>'
test.cc:11: error: declaration of 'struct Foo<A, Goo>'
Tại sao tôi không thể một phần chuyên foo1()? Nếu đây không phải là cách, làm thế nào để làm điều này?
Tôi có một câu hỏi khác: nếu tôi muốn foo2() chỉ được xác định cho A = int, B = Hoo và không cho bất kỳ kết hợp nào khác, làm cách nào để làm điều đó?
Đây không phải là một chuyên môn hóa một phần, Foo có hai tham số và bạn chỉ định một trong 'Foo :: foo1'. –
@BoPersson: Tôi nghĩ rằng tôi là một phần chuyên. Tham số mẫu thứ hai là mặc định Goo. – user231536
Và X là gì trong Goo. Goo là mẫu lấy tham số X. Nó được chỉ định ở đâu? –
jmucchiello