可变模板:错误:参数包没有用“...”扩展

rh0*_*h0x 3 c++ compiler-errors argument-unpacking variadic-templates

我正在尝试传递多个字符串来填充容器,但收到此错误。使用 gcc 4.9.3

template< class T >
struct DataCompare {
    bool operator()( const T& lhs, const T& rhs ) const
    {
        return operator<( lhs->getCode(), rhs->getCode() );
    }
};

using AggContainer = boost::container::flat_set< T, C >; 
using DataPtr      = boost::shared_ptr< BomQueueData >;
using PropertyQueueDataLess = DataCompare< DataPtr >;
using QueueDataPtrs = AggContainer< DataPtr, DataLess >;

QueueDataPtrs vector_name;

template< class Container, typename ... Args >
static void fillWithData(Container & oDataContainer, Args const & ... args)
{
    typedef typename Container::value_type::element_type QueueDataPtr;
    oDataContainer.emplace(new QueueDataPtr(args));
}

fillWithData(vector_name, x, a, b, c, d); // compiler error
Run Code Online (Sandbox Code Playgroud)

怎么解决?

R S*_*ahu 5

args是一个参数包,而不是一个参数。这就是为什么你不能使用:

DataContainer.emplace(new QueueDataPtr(args));
Run Code Online (Sandbox Code Playgroud)

相反,使用

DataContainer.emplace(new QueueDataPtr(args...));
Run Code Online (Sandbox Code Playgroud)

这扩展了参数包。