c ++ 11递归可变参数模板

Pra*_*een 3 c++ recursion templates c++11

我试图了解递归可变参数模板的工作原理.

#include <iostream>

template<typename T>
static inline void WriteLog(T&& msg) {
    std::wcout << std::forward<T>(msg);
}

template<typename T, typename... Ts>
static void WriteLog(T&& msg, Ts&&... Vals) {
    WriteLog(std::forward<T>(msg));
    WriteLog(std::forward<Ts>(Vals)...);
    std::wcout << "\n**End**";
}

int main() {
    WriteLog("apple, ", "orange, ", "mango");
}
Run Code Online (Sandbox Code Playgroud)

输出:

apple, orange, mango
**End**
**End**
Run Code Online (Sandbox Code Playgroud)

我只期待一个**End**.为什么要打印两次?

Oth*_*oun 10

调用树:

 WriteLog("apple, ", "orange, ", "mango");
       ->WriteLog("apple, ");
            -> std::wcout << "apple, ";
       ->WriteLog( "orange, ", "mango");
            ->WriteLog("orange, ");
                 -> std::wcout << "orange, ";
            ->WriteLog( "mango");
                 -> std::wcout << "mango";
            ->std::wcout << "\n**End**";
       ->std::wcout << "\n**End**";
Run Code Online (Sandbox Code Playgroud)