可変長テンプレート引数としてメンバへのポインタを渡すことは可能ですか?私は構文を理解していないようです。関数の可変長テンプレートパラメータとしてのメンバへのポインタ
それはこのように動作します呼び出す:私はクラステンプレート
と同様の方法でのparamsを渡すしたいf(obj, &A::a, &A::b);
:このように使用することができます
struct A
{
int a;
float b;
}
template <typename ... TArgs> void f(A *obj, TArgs ... params)
{
void *members[] { (&(obj->*params))... };
// ... do something ...
}
template <[something] ... params> class Foo
{
void Bar(A *obj)
{
void *members[] { (&(obj->*params))... };
// ... do something ...
}
};
これは次のように使用してください:
Foo<&A::a, &A::b> foo;
foo.bar(obj);
私は[何か]が何であるべきかを考え出すのに困っています。
メンバーの種類が知られており、唯一つのパラメータがありますされている場合、それは次のように行うことができます。
template <int A::*ptr> //...
はメンバーが違う不明であるメンバーポインタの可変引数パラメータリストのためにこれを一般化する方法はあります事前にタイプ?
更新:固定の既知のタイプのメンバーポインタのための可変引数引数パックがそうのように宣言されています
template<int A::*...ptr> struct Foo {};
は今、私は推測することができる型名とint型を交換する必要があります。
そして、C++ 17と、完璧な作品を以下:
template<auto A::*...ptr> struct Foo {};
残念ながら、私はあなたが別のレベルを使用することができ、C++ 14ではC++ 14
多分 'template? –
Zereges
残念ながら、コンパイルされません – Ghostrider