gpt4 book ai didi

c++ - Variadic 可转换检查类中的参数

转载 作者:行者123 更新时间:2023-11-28 02:30:41 32 4
gpt4 key购买 nike

我希望创建一个类来检查两个参数类型列表,以查看是否可以将第一个列表中的所有参数转换为第二个列表。到目前为止,我有这样的事情:

template <typename OArg> 
class conv{
public:
template<typename IArg>
static bool check(){
return std::is_convertible<IArg,OArg>::value;
}
};

template <typename OArg, typename... OArgs>
class conv{
public:
template<typename IArg, typename... IArgs>
static bool check(){
return Op<OArg>::check<IArg>() && Op<OArgs...>::check<IArgs...>();
}
};

我想这样使用它:

bool pass = conv<char,a_class,float>::check<float,int,b_class>();

编译时我得到:

recursive.cpp:19:7: error: redeclared with 2 template parameters
class Conv{
^
recursive.cpp:10:7: note: previous declaration ‘template<class OArg> class Conv’ used 1 template parameter
class Conv{

在检查时,我没有 IArgsOArgs 的实例您能提出任何解决方案吗?

最佳答案

你不能重载类模板。您可以对它们进行部分特化,但这里没有必要这样做。借用@Columbo 的bool_pack trick :

template<bool...> struct bool_pack;
template<bool... b>
using all_true = std::is_same<bool_pack<true, b...>, bool_pack<b..., true>>;

template <typename... OArgs>
class conv{
public:
template<typename... IArgs>
static bool check(){
return all_true<std::is_convertible<IArgs, OArgs>::value...>::value;
}
};

关于c++ - Variadic 可转换检查类中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29095790/

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