C++模板添加/启用基于模板参数的构造函数
C++ template add/enable constructor based on template argument
在
以下情况下,是否可以为模板的某些专用化定义专用构造函数:
template<typename T, size_t D>
class vector {
T values[D];
public:
vector();
};
我想添加的依赖于 D 参数的构造函数:
template<typename T>
vector<T, 2>::vector(T t1, T t2) { ... }
template<typename T>
vector<T, 3>::vector(T t1, T t2, T t3) { ... }
template<typename T>
vector<T, 4>::vector(T t1, T t2, T t3, T t4) { ... }
template<bool B>
using EnableIfB = typename std::enable_if<B, int>::type;
template<typename T, size_t D>
class vector {
T values[D];
public:
template<size_t D1 = D, EnableIfB<D1 == 2> = 0>
vector(T t1, T t2) { ... }
template<size_t D1 = D, EnableIfB<D1 == 3> = 0>
vector(T t1, T t2, T t3) { ... }
template<size_t D1 = D, EnableIfB<D1 == 4> = 0>
vector(T t1, T t2, T t3, T t4) { ... }
};
希望这有帮助。
考虑为主模板定义所有构造函数 vector<T, D>
,然后在每个构造函数中static_assert
以确保 arity 匹配。 例如:
vector(T t0, T t1)
{
static_assert(D == 2, "Eeeeeeeekkkkk! Wrong constructor!");
}
相关文章:
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 类成员函数参数列表是否可以依赖于模板参数?
- 专用于可变参数模板成员函数
- 作用于可变类模板参数的递归函数
- C++ 使函数调用依赖于模板参数
- 如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
- 依赖于其他模板参数的模板参数
- 使用不依赖于方法模板参数的enable_if
- 将 const 限定符应用于模板参数时的不同编译器行为
- 如何定义依赖于模板参数的类型定义
- C++ 错误:"没有依赖于模板参数的'setw'参数
- 依赖于模板参数的范围查找
- 使用的类型别名如何指定依赖于模板参数的模板模板参数
- G++:错误:没有依赖于模板参数的参数'pow',因此必须提供'pow'声明 [-fallowive]
- 嵌套在模板化类中的类的大小,但不依赖于模板参数
- 如何更好地处理依赖于模板参数的类成员类型
- 如何使用指向通用模板类的指针来访问依赖于模板参数类型的成员函数
- 如何解决 - 错误:没有依赖于模板参数的"退出"参数
- 类型定义应该依赖于模板参数
- 如何实现内部实现依赖于模板参数的类