构造函数的部分模板专用化
Partial template specialization for constructor
我需要看起来像这样的类:
template<typename T, class S, size_t C>
class myClass
{
public:
myClass(); // Ctor
/*
*/
private:
S myData;
}
其中 T 是存储数据类型,S 是容器类型,C 是它的大小。方法不依赖于容器类型,但我仍然需要正确初始化 S。例如,让 S 被std::vector
,我尝试过:
template<typename T, size_t C>
myClass<T, std::vector<T>, C>::myClass()
{
}
但我得到E0040 expected identifier
错误。
你不能部分专用化一种方法,你可以部分专用化整个类,但需要一些重复。
由于您可以使用 C++17,因此您可以调整实现:
template<typename T, class S, size_t C>
myClass<T, S, C>::myClass()
{
if constexpr (std::is_same_v<S, std::vector<T>>) {
// special case
} else {
// regular case
}
}
在另一个选项(C++17 之前(中标记拆分,该选项的优点是允许成员初始值设定项列表:
template <typename T> struct tag{};
template <typename T, class S, size_t C>
class myClass
{
private:
myClass(tag<std::vector<T>>) : myData(/*special case */) {/* special case */}
template <typename U>
myClass(tag<U>) : myData(/*regular case */) {/* regular case */}
public:
myClass() : myClass(tag<S>{}) {}
private:
S myData;
};
相关文章:
- 具有专用化的模板类中的可靠条件复制和移动构造函数
- 构造函数 (g++) 的显式模板专用化
- 构造函数的部分模板专用化
- 如何在另一个类模板中定义完全专用类的构造函数
- 模板专用类之间的构造函数重载
- 使用模板的构造函数专用化
- 如何将模板构造函数专用化移动到 cpp 文件
- 模板类模板构造函数专用化
- 定义专用模板类构造函数时避免重复
- 模板化类的模板化构造函数的显式模板专用化
- 具有 n 个参数的模板专用构造函数
- 不会调用模板化构造函数的专用模板
- 没有模板参数的类的C++专用构造函数(跳过尖括号)
- 专用于非模板类的模板化构造函数
- 专用于模板类构造函数
- C++单个构造函数模板专用化
- 模板专用化没有匹配的构造函数
- 在模板专用化中添加单个构造函数方法
- 从派生类实现基类构造函数专用化的替代方法是什么
- 类定义中构造函数的模板专用化