簡體   English   中英

C++ 約束可變參數模板參數

[英]C++ Constrained Variadic Template Parameters

目前使用 C++20、GCC 11.1.0。

一般來說,我對模板和概念都很陌生,但我想創建一個模板 function ,其中包含1 to n個 arguments,受限於能夠將+=添加到std::string的要求。 我已經搜索了好幾天了,但正如你所看到的,我在這里真的很掙扎。

嘗試1:

template<typename T>
concept Stringable = requires (T t)
{
    {std::string += t} -> std::same_as<std::string::operator+=>;
};

template <typename Stringable ...Args>
void foo(Args&&... args)
{
    // Code...
}

編輯:嘗試2:

template<typename T>
concept Stringable = requires (std::string str, T t)
{
    str += t;
};

template <typename Stringable ...Args>
void foo(Args&&... args)
{
    // Code...
}

Attempt2 非常接近,除了typename關鍵字需要刪除,因為Stringable不是類型而是概念。 正確的語法是

#include <string>

template<typename T>
concept Stringable = requires (std::string str, T t) {
  str += t;
};

template<Stringable... Args>
void foo(Args&&... args) {
  // Code...
}

暫無
暫無

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

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