2017-03-26 4 views

Répondre

6

Ce n'est pas possible pour autant que je sache. Vous devez utiliser un std::tuple pour stocker les paramètres:

template<typename... Args> 
struct A 
{ 
    std::tuple<std::decay_t<Args>...> args_; 

    A(Args&&... args) : args_(std::make_tuple(std::forward<Args>(args)...)) 
    {} 
}; 

À partir de 17 C++, vous pouvez utiliser std::apply aux fonctions cal avec args_ en tant que paramètres, au lieu de les déballer:

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

Le ' std :: move' n'est pas pertinent si les arguments sont passés par valeur. 'Args && ... args'? – DeiDei

+0

@DeiDei Vous avez raison. Fixé. Merci :) – Rakete1111

+0

L'utilisation de 'std :: apply' pour décompresser de tels tuples dans un pack devrait probablement être mentionnée. – Yakk