在我研究的模板中,我们只能有整数参数,即int,指向其他数据类型的指针以及模板模板参数。
但是在这里我只能传递一个简单的类作为模板参数。这是有效的还是我所理解的是错误的。这是一段代码。
template <typename T>
class A {
public:
T t;
};
class B {
public:
float f;
};
template <template<typename> class X, class H>
class C {
public:
H obj;
X<int> x;
};
int main()
{
C < A, B > my;
my.obj.f = 2.3f;
my.x.t = 5;
cout << "template class object: " << my.obj.f << endl;
cout << "class object : " << my.x.t << endl;
}
答案 0 :(得分:2)
模板参数有三种类型:
int
,std::string
等)。在您的示例中,H
是一个类型参数; 42
)。您的示例不包含任何这些内容; A
是模板参数。在我研究的模板中,我们只能有整数参数,即int,指向其他数据类型的指针以及模板模板参数。
您在上述句子的第一部分中所指的内容适用于第二类参数,即非类型参数,而句子的最后部分适用于模板模板参数。
实际上,非类型参数需要特定类型的值,例如int
,X*
在实例化模板时作为参数传递,并且存在严重限制:
例如,这是禁止的:
template<double D>
struct X { /* ... */ };
虽然这是允许的:
template<int* P>
struct X { /* ... */ };
但是对P
:
int main()
{
int x = 42;
X<&x> obj; // ERROR!
}
您上面的句子未涵盖的部分是第一类(类型参数),实际上是最常见的部分。除其他外,类型参数用于实例化对象的泛型集合,例如:
std::vector<my_class> v;