相关疑难解决方法(0)

如何一起使用C++和C可变参数?

通常,在函数中使用C++ 11可变参数模板功能要求基于可变参数的函数参数是函数参数列表中的最后一个.有一个例外; 如果存在C级可变参数,它们是倒数第二个参数,它们必须是最后的.

template < typename ...Args >
int  super_printf( Something x, Args &&...a, ... );
Run Code Online (Sandbox Code Playgroud)

我有时会随机思考C++,我想知道如何实现这样的功能.我首先想到了通常从a递归剥离的论点,然后我记得C级varargs没有级联.我必须马上把它们变成一个明确的va_list.

template < typename ...Args >
int  super_vaprintf( Something x, std::va_list &aa, Args &&...a );
// Note that "aa" is passed by reference.

template < typename ...Args >
int  super_printf( Something x, Args &&...a, ... )
{
    std::va_list  args2;
    int           result;

    va_start( args2, XXX );  // (A)
    try {
        result = super_vaprintf( x, args2, std::forward<Args>(a)... );
    } catch ( ... ) { …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-functions variadic-templates c++11

11
推荐指数
2
解决办法
2071
查看次数