gpt4 book ai didi

C++11 constexpr 可变逻辑表达式

转载 作者:行者123 更新时间:2023-11-30 01:21:52 26 4
gpt4 key购买 nike

我试图在编译时使用可变参数模板来测试某些属性(type_trait),但似乎以下代码无法编译

template<typename test>
constexpr bool trait_test(){
return test::value;
}

template<typename test, typename... Others>
constexpr bool trait_test(){
return test::value&&trait_test<Others...>();
}

template<typename A, typename... Deriveds>
constexpr bool commonBaseClass{
return trait_test<std::is_base_of<A,Deriveds>...>();
}

问题似乎是当“Others”的长度为 0 时,有 2 个可能的调用

trait_test<typename test>
trait_test<typename test, typename... Others={}>

而且编译器不知道要看哪一个。我当然想偷看第一个(并保留所有内容)

最佳答案

让您的代码编译的最小更改是将您的第二个 test_trait 重载替换为:

template<typename T0, typename T1, typename... Others>
constexpr bool trait_test(){
return T0::value&&trait_test<T1, Others...>();
}

这意味着 1 个参数匹配第一个,2 个或更多参数匹配第二个。

关于C++11 constexpr 可变逻辑表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17503198/

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