使用来自`cstdarg`的宏来访问正常的函数参数是否合法?

时间:2015-01-11 14:07:16

标签: c++ variadic-functions

我正在编写一个模板容器(类似于元组)。现在我需要为它创建一个构造函数。所以,如果我这样定义:

template <typename ...P> class Container
{
    /*blah-blah*/
public:
    Container(P...)
    {
        /*blah-blah*/
    };
};

我会在包扩展后得到以逗号分隔的匿名参数。为他们创建名称可能是不可能的,所以我正在考虑使用'cstdarg'中的宏来访问它们。当然,我需要创建一个非模板化的第一个参数来使用它们,但问题是:

使用'cstdarg'中的东西访问普通参数(只是常用参数,而不是与...函数参数一起使用的参数)是否合法?

1 个答案:

答案 0 :(得分:2)

不,cstdarg参数可以通过与命名参数(包括参数包)不同的ABI约定传递。通常,cstdarg不支持非标准布局(即类似C)的C ++类型,并且它不应该在C ++代码中使用。