template<typename... Args>
struct A
{
Args&... args_;
//
// error : only function and template parameters can be parameter packs
//
A(Args&... args) : args_(args)
{}
};
int main()
{
auto a = A(1, 2, 3);
}
私のコンパイラがあるclang 5.0
と-std=c++1z
。
このような場合に可変個引数テンプレートの引数を保存できるクラスを定義するにはどうすればよいですか?
私の知る限り、それは不可能です。std::tuple
パラメータを保存するには、を使用する必要があります。
template<typename... Args>
struct A
{
std::tuple<std::decay_t<Args>...> args_;
A(Args&&... args) : args_(std::make_tuple(std::forward<Args>(args)...))
{}
};
C ++ 17以降、std::apply
関数をargs_
解凍する代わりに、パラメーターとして関数を計算するために使用できます。
std::apply(func, args_);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加