2014-04-25 24 views
2

我有一个可移动的(但不可拷贝)与可变参数模板的构造安放对象,具有可变参数的构造成图

struct foo 
{ 
    std::string a,b,c; 
    foo(foo const&)=delete; 
    foo(foo&&)=default; 
    template<typename...T> 
    for(T&&...); 
}; 

型,我想将它添加到地图:

template<typename...T> 
void add_foo(std::map<std::string,foo>&map, const char*name, T&&...args) 
{ 
    map.emplace(std::piecewise_construct,  // how? perhaps like this? 
       std::forward_as_tuple(name), // no: 
       std::forward_as_tuple(args)); // error here 
} 

回答

2

std::forward_as_tuple()需要一个包,所以你可以简单地使用...扩展args

map.emplace(std::piecewise_construct, 
      std::forward_as_tuple(name), 
      std::forward_as_tuple(args...)); 
+0

它是如此简单... – Walter

2

你需要解压的参数:args...

看到它Live On Coliru

#include <string> 
#include <map> 

struct foo 
{ 
    std::string a,b,c; 
    foo(foo const&)=delete; 
    foo(foo&&)=default; 
    template<typename...T> foo(T&&...) {} 
}; 


template<typename...T> 
void add_foo(std::map<std::string,foo>& map, const char*name, T&&...args) 
{ 
    map.emplace(std::piecewise_construct,  // how? perhaps like this? 
      std::forward_as_tuple(name), // no: 
      std::forward_as_tuple(args...)); // error here 
} 

int main() 
{ 
    std::map<std::string,foo> m; 
    add_foo(m, "a", "b", "c"); 
} 
相关问题