2017-03-26 16 views
4
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です。可変のテンプレート引数を保存できるクラスを定義するには?

このような場合にバリデリックテンプレート引数を保存できるクラスを定義する方法はありますか?

答えて

6

私が知る限りこれはできません。あなたが代わりにそれらを開梱の、パラメータとしてargs_でcalの関数にstd::applyを使用することができ、

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::tupleを使用する必要が

std::apply(func, args_); 
+0

'引数が値渡されても、std :: move'は無関係です。 'Args && ... args'? – DeiDei

+0

@DeiDeiあなたは正しいです。一定。ありがとう:) – Rakete1111

+0

このようなタプルをパックに解凍するための 'std :: apply'の使用はおそらく言及されるべきです。 – Yakk

関連する問題