2017-03-26 5 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

내가 아는 한 불가능합니다.

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)로, 대신를 풀고의, 매개 변수로 args_와 칼 기능에 std::apply를 사용할 수 있습니다 : 당신은 매개 변수를 저장하는 std::tuple를 사용할 필요가

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

은' 인수가 값에 의해 전달되면 std :: move'는 무의미합니다. 'Args && ... args'? – DeiDei

+0

@DeiDei 네 말이 맞아. 결정된. 감사합니다 :) – Rakete1111

+0

'td :: apply'를 사용하여 그러한 튜플을 팩으로 다시 압축 해제하는 것을 언급해야합니다. – Yakk