如何在另一个 class 中特化模板 class 的构造函数?
How to specialize constructor of template class in another class?
考虑以下 classes:
// Class1.hpp
class Class1 {};
// Class2.hpp
class Class2 {};
// ClassA.hpp
#include "Class1.hpp"
#include "Class2.hpp"
class A {
private:
enum class Enum {
Enum1,
Enum2
};
struct B {
B(Enum argEum) : enumMember{argEnum} {}
Enum enumMember;
};
template <class T>
struct C : public B {}
};
现在我想对 C 的构造函数进行以下特化:
C<Class1>::C() : B{Enum::Enum1} {}
C<Class2>::C() : B{Enum::Enum2} {}
根据我的尝试,我想我必须将专业化放在 class A 的 class 定义之外,但我真的不知道该怎么做。
您可以在任何可能出现模板化实体声明的地方放置专门化。命名空间范围很好,但它要求您完全限定您的专长。
此外,您不能专门化未首先在主模板中声明的成员。所以考虑到这两点:
// In the class
template <class T>
struct C : public B {
C() = delete;
};
// In namespace scope
template<>
A::C<Class1>::C() : B{Enum::Enum1} {}
template<>
A::C<Class2>::C() : B{Enum::Enum2} {}
还有一个live example可以参考。
考虑以下 classes:
// Class1.hpp
class Class1 {};
// Class2.hpp
class Class2 {};
// ClassA.hpp
#include "Class1.hpp"
#include "Class2.hpp"
class A {
private:
enum class Enum {
Enum1,
Enum2
};
struct B {
B(Enum argEum) : enumMember{argEnum} {}
Enum enumMember;
};
template <class T>
struct C : public B {}
};
现在我想对 C 的构造函数进行以下特化:
C<Class1>::C() : B{Enum::Enum1} {}
C<Class2>::C() : B{Enum::Enum2} {}
根据我的尝试,我想我必须将专业化放在 class A 的 class 定义之外,但我真的不知道该怎么做。
您可以在任何可能出现模板化实体声明的地方放置专门化。命名空间范围很好,但它要求您完全限定您的专长。
此外,您不能专门化未首先在主模板中声明的成员。所以考虑到这两点:
// In the class
template <class T>
struct C : public B {
C() = delete;
};
// In namespace scope
template<>
A::C<Class1>::C() : B{Enum::Enum1} {}
template<>
A::C<Class2>::C() : B{Enum::Enum2} {}
还有一个live example可以参考。