簡體   English   中英

C++模板| 錯誤:未使用“...”擴展參數包:

[英]C++ template | error: parameter packs not expanded with '…':

我收到以下錯誤:

error: parameter packs not expanded with '...':
  auto const m = msg...;

代碼:

#include <cstdio>
#include <iostream>
#include <cstdarg>
#include <string>

using namespace std;

template<typename... T>
void print(T& ... msg)
{
    auto const m = msg...;
    cout << m;
}

int main()
{
    print("a", "o");
}

這個語法:

auto const m = msg...;

無效。 嘗試這個:

template <typename... T> void print(T &...msg) {
  using var = int[];
  (void)var{0, (std::cout << msg << std::endl, 0)...};
}

感謝這個參考能夠回答這個問題。

如果你想保存在一個變量中,然后打印,只有msg...包,也許

template <typename... T>
void print (T& ... msg)
{
    auto const m = std::get<sizeof...(msg)-1u>(std::tie(msg...));
    std::cout << m;
}

如果要打印所有msg...值,從 C++17 開始,您可以使用模板折疊

template <typename... T>
void print (T& ... msg)
{ ((std::cout << msg), ...); }

在 C++17 之前,您可以使用未使用變量的初始化列表來模擬這一點(請參閱 Rohan Bari 的答案以獲得一個很好的示例)。

暫無
暫無

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

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