簡體   English   中英

為什么我的遞歸可變參數模板沒有編譯?

[英]Why is my recursive variadic template not compiling?

我想更好地理解可變參數模板,這就是為什么我編寫了一個函數,該函數接受任意數量的參數,將它們轉換為字符串,將它們添加到字符串流並打印該流。 我的期望是編譯器從\\\\1跳轉到\\\\2\\\\3\\\\4\\\\5 (比較代碼)。 但相反,它停留在\\\\2 這是為什么?

編譯器不應該采用與函數調用“最匹配”的情況嗎? 我對可變參數模板的理解是從上到下,從基本情況到異常。 我原以為,在\\\\2 ,當調用print(strs, "this", " is ", "a ", "test ", 1, 2, 'a') ,這將轉到\\\\3 .

玩這個代碼。

#include <string>
#include <iostream>
#include <sstream>


void print(std::string msg) // 5
{
    std::cout << msg;
}

template <class T>
void print(std::stringstream &strs, T t) // 4
{
    strs << std::to_string(t);
    print(strs.str());
}

template <class... Args, class T>
void print(std::stringstream &strs, T t, Args... args) // 3
{
    strs << t;
    print(strs, args...);
}

template <class... Args>
void print(Args... args) // 2
{
    std::stringstream strs();
    print(strs, args...);
}

int main()
{
    print("this", " is ", "a ", "test ", 1, 2, 'a'); // 1
}

惱人的解析:

std::stringstream strs(); 函數聲明

std::stringstream strs{};

或者

std::stringstream strs;

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM