gpt4 book ai didi

c++ - 用于查找相似的连续类型名称的模板元程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:47 26 4
gpt4 key购买 nike

我是模板元编程的新手,正在尝试创建一个程序来查找参数包是否具有连续的相同类型名称。例如<int, int> , <int, char, char>将返回 true 和 <int,char><int, char, int>不会。

我设法编写了这段代码,但它似乎在将参数包的每个值与其自身进行比较。我只是在寻找一种方法来遍历参数包的值以与其连续元素进行比较。

template<typename T, typename U>
struct sameTypename{
enum {value = false};
};

template<typename T>
struct sameTypename<T, T>{
enum {value = true};
};

template <typename T, typename ...args>
struct consTypename{
enum {value = (sameTypename<consTypename<args...>, consTypename<args...>>::value)};
};

template <typename T>
struct consTypename<T, T>{
enum {value = true};
};

template <typename T>
struct consTypename<T>{
enum {value = false};
};

最佳答案

给你:

#include <type_traits>

template <typename ...P> struct has_adjacent_same_types : std::false_type {};
template <typename A, typename B, typename ...P> struct has_adjacent_same_types<A, B, P...>
: std::bool_constant<std::is_same_v<A,B> || has_adjacent_same_types<B, P...>::value> {};

我用了: std::false_type {};: std::bool_constant<X> {};而不是
{enum{value = false};};{enum{value = X};};分别,但这只是一个偏好问题。


我使用的一些特性来自 C++17。如果您使用的是旧版本,请注意:

std::bool_constant and std::is_same_v are available only starting from C++17 (but that you can use std::integral_constant and std::is_same<>::value before).

(c) @max66

关于c++ - 用于查找相似的连续类型名称的模板元程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53151604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com