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