Một lớp:lớp Nested mẫu chuyên môn
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
Và tôi muốn chuyên Nested
. Dưới đây là những gì tôi đã cố gắng:
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
template <>
class Nested<int>{}; // by my logic this should work by I have a compilation error "explicit specialization in non-namespace scope 'class A<C, T>'"
Nested<T> n;
};
nỗ lực tiếp theo của tôi:
template<typename C, typename T>
class A
{
template <typename U>
class Nested{};
Nested<T> n;
};
template<>
A<>::Nested<int>{}; // What is the correct syntax to do it here? Now I have an error "wrong number of template arguments (0, should be 2)"
đây trên stackoverflow Tôi tìm thấy một giải pháp:
template<typename C, typename T>
class A
{
template <typename U, bool Dummy = true>
class Nested{}; // why need of this Dummy??
template <bool Dummy>
class Nested<int, Dummy>{}; // why need to provide an argument??
Nested<T> n;
};
Nó hoàn toàn hoạt động, nhưng tôi không thể hiểu làm thế nào. Tại sao lại cung cấp một đối số mẫu giả? Tại sao tôi không thể sử dụng chuyên môn thô template<> class Nested<int, true>{}
hoặc template<> class Nested<int>{}
?
Có, nhưng nó không chạy trên gcc và tiếng lóng. Loos như Microsoft không theo tiêu chuẩn. Hoặc có thể có một trình chuyển đổi trình biên dịch. – nikitablack