带有额外模板参数的构造函数
Constructor with extra template argument
这个问题似乎与以下内容密切相关,但我还不完全理解。
- 是否可以显式指定构造函数的模板参数?
- 类模板中的模板构造函数 - 如何为第二个参数显式指定模板参数?
我想要一个模板类,它在构造函数中执行一些不平凡的事情,具体取决于另一种模板类型。一个最小的例子是这里:
template <typename A>
class Class {
public:
template <typename B>
Class();
private:
int i;
};
template <typename A, typename B>
Class<A>::Class() {
B b;
i = b.get_number();
}
这不会使用 GCC 编译:
$ env LC_ALL=C g++ --std=c++11 -c template.cpp
template.cpp:14:1: error: prototype for 'Class<A>::Class()' does not match any in class 'Class<A>'
Class<A>::Class() {
^~~~~~~~
template.cpp:7:5: error: candidate is: template<class A> template<class B> Class<A>::Class()
Class();
^~~~~
使用 Clang 编译会给出其他错误:
$ env LC_ALL=C clang++ --std=c++11 -c template.cpp
template.cpp:13:1: error: too many template parameters in template redeclaration
template <typename A, typename B>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
template.cpp:3:1: note: previous template declaration is here
template <typename A>
^~~~~~~~~~~~~~~~~~~~~
1 error generated.
当我将模板参数B
附加到整个类时,我可以让它编译。
template <typename A, typename B>
class Class {
public:
Class();
private:
int i;
};
template <typename A, typename B>
Class<A, B>::Class() {
B b;
i = b.get_number();
}
有没有办法控制模板参数B
对构造函数的影响?还是我必须将其附加到整个班级?
template
类中template
方法的类外定义的正确语法如下:
template <typename A> // Class template parameters
template <typename B> // Method template parameters
Class<A>::Class() {
// ^^^
// Class template parameters
// ...
}
魔杖盒上的现场示例
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?