我正在编写一个模板容器(类似于元组)。现在我需要为它创建一个构造函数。所以,如果我这样定义:
template <typename ...P> class Container
{
/*blah-blah*/
public:
Container(P...)
{
/*blah-blah*/
};
};
我会在包扩展后得到以逗号分隔的匿名参数。为他们创建名称可能是不可能的,所以我正在考虑使用'cstdarg'中的宏来访问它们。当然,我需要创建一个非模板化的第一个参数来使用它们,但问题是:
使用'cstdarg'中的东西访问普通参数(只是常用参数,而不是与...
函数参数一起使用的参数)是否合法?
答案 0 :(得分:2)
不,cstdarg
参数可以通过与命名参数(包括参数包)不同的ABI约定传递。通常,cstdarg
不支持非标准布局(即类似C)的C ++类型,并且它不应该在C ++代码中使用。