簡體   English   中英

一個表達式的概念是否滿足,既包含類型又包含引用?

[英]Can a concept satisfaction of an expression, contains both type and the reference?

有沒有辦法讓下面的代碼不那么臃腫?

我的意思是以某種方式同時加入類型和引用( ||不起作用)。

template<typename T>
concept IntegralVector = std::integral<typename T::value_type> &&
requires(T t)
{
    { t.size() } -> std::convertible_to<std::size_t>;
}
&& (requires(T t)
{
    { t[0] } -> std::same_as<typename T::value_type&>;
} || requires(T t)
{
    { t[0] } -> std::same_as<typename T::value_type>;
});

一個有效的技巧可以是:

{ 0 + t[0] } -> std::integral;

但我想堅持使用typename T::value_type

你可能想要這樣的東西:

template <typename T, typename U>
concept decays_to = std::same_as<std::decay_t<T>, U>;

用作:

template<typename T>
concept IntegralVector =
    std::integral<typename T::value_type>
    && requires (T t) {
        { t.size() } -> std::convertible_to<std::size_t>;
        { t[0] } -> decays_to<typename T::value_type>;
    };

這也將value_type const&作為一個選項捕獲,我不確定是否有意省略。

另一種選擇是使用 C++23 auto(x) ,這是語言中的衰減副本

#include<concepts>

template<typename T>
concept IntegralVector = std::integral<typename T::value_type> &&
requires(T t) {
  { t.size() } -> std::convertible_to<std::size_t>;
  { auto(t[0]) } -> std::same_as<typename T::value_type>;
};

演示。

暫無
暫無

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

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