繁体   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