[英]C++ variadic template with non-type parameters of different types
我想定義一個類,該類采用非類型參數(可能是不同類型)的列表。 例如,以下內容應有效:
Test<3, 4.5, 6> t;
如果所有參數都具有相同的類型,例如int
,則可以使用以下定義:
template<int... args>
class Test {
// ...
};
更具體地說,在我的特定用例中,第二個類Base
具有許多成員,我想傳遞Base
成員指針。
Test<&Base::a, &Base::b>
如果Base::a
和Base::b
具有公共類型T
,則可以按以下方式定義Test
。
template<int Base::* ...args>
class Test {
//
};
我該如何定義此類Test
?
您可以通過以下方式進行操作:
template <class... Types>
struct Wrapper
{
template <Types... args>
class Test {
// ...
};
};
注意,簡單的注釋template <class... Types, Types... args> class Test;
根據標准是不允許的(請參閱[temp.param] 14.1 / 15段)。
使用示例(請注意, float
, double
和long double
常量不能為非類型模板參數):
Wrapper<int, char, unsigned>::Test<1, '2', 3U> t;
具有指向成員的指針的更具體的情況可以類似地實現:
struct Base
{
int a;
float b;
void c() {}
};
template <class... Types>
struct Wrapper
{
template <Types Base::*... args>
class Test {
//
};
};
使用示例:
Wrapper<int, float, void ()>::Test<&Base::a, &Base::b, &Base::c> t2;
可以使用可變參數宏和decltype
關鍵字來縮短此表示法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.