本文介绍了编译时的模板参数计算的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在编译时推导出两个模板参数中较大的一个.两个模板参数都是 size_t 类型.

I'm trying to deduce the greater of two template arguments at compile time. Both template arguments are of type size_t.

我有一个模板化类型 SomeType,它采用 size_t 作为模板参数.然后我有一个函数,它采用两个具有不同模板 size_t 的 SomeType 参数,我希望返回类型是 SomeType,其模板化 size_t 是两个输入 size_t 大小中较大的一个.

I have a templated type, SomeType, which takes a size_t as it's template argument. I then have a function that takes two SomeType parameters with different template size_t's and i want the return type to be a SomeType with its templated size_t to be the greater of the two input size_t sizes.

template <size_t d> struct SomeType {...}

template<size_t d1, size_t d2>
SomeType<the_larger_of_d1_and_d2> Func(SomeType<d1> A, SomeType<d2> B)
{
    ...
}

这可能吗?

推荐答案

可以直接计算类型,不需要SFINAE:

You can compute the type directly, no need for SFINAE:

template<size_t d1, size_t d2>
SomeType<(d1 > d2 ? d1 : d2)> Func(SomeType<d1> A, SomeType<d2> B)
{
    …
}

这篇关于编译时的模板参数计算的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 06:04