[英]C++ variadic templates with type and non-type argument mixing for recursive inheritance
[英]Passing Class as a Non-type argument in templates in c++
在我研究的模板中,我們只能有整數參數,即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;
}
模板參數有三種類型:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.