gpt4 book ai didi

c++ - 模板参数类型推导

转载 作者:搜寻专家 更新时间:2023-10-31 00:37:50 24 4
gpt4 key购买 nike

我又在摆弄模板元编程,并试图更好地理解它。我创建了以下简单的模板元函数。

template<typename T, T Value>
struct is_positive
{
static const bool value = (Value >= 0);
}

const bool is_positive_test_1 = is_positive<int32_t, 3>::value; //true
const bool is_positive_test_2 = is_positive<int32_t, 0>::value; //true
const bool is_positive_test_3 = is_positive<int32_t, -1>::value; //false

一切正常,正如预期的那样,但我想知道是否有一种方法可以消除指定 Value 类型的需要参数,因此调用约定将改为:

is_positive<1>::value

提前致谢。 :)

编辑

我不希望这只是int32_t工作, 还有 float32_t和任何其他数字类型。例如,我想要 is_positive<3.141f>::value无需专门化模板即可有效。

最佳答案

只能推导函数模板参数,不能推导类模板参数。在 C++03 中你不能有编译时函数,但在 C++11 中你可以使用 constexpr:

template<typename T>
constexpr bool is_positive(T val) {
return val >= 0;
}

并且只是为了表明它是在编译时求值的,以下将编译:

template<bool V>
struct compile_time_tester
{};

int main() {
compile_time_tester<is_positive(3.14)> foo;
return 0;
}

关于c++ - 模板参数类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19148979/

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