gpt4 book ai didi

c++ - 如果类型的大小大于 X,如何实现接受类型并计算引用的类型特征?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:21 24 4
gpt4 key购买 nike

我一直在实现几个应该能够容纳任何类型的数据结构类,最近我一直在用类型特征“升级”它们。

我想实现一种类型特征,以防止将非常大的值用作硬拷贝。例如:

template<typename T>
T Max(T a, T b){ return (a < b) ? b : a; }

如果 T 碰巧碰巧有一个离谱的大小,我不想将 T 作为一个值。

相反,我想要这样的东西:

template<typename T>
T Max(ref_if_large<T>::val a, ref_if_large<T>::val b){ return (a < b) ? b : a; }

我尝试自己实现这个,但我已经陷入了其中一个我只是看不出有什么问题的时刻。

template<typename T, bool cond>
struct ref_if_true {
using V = T;
};

template<typename T>
struct ref_if_true<T, true> {
using V = T&;
};

template<typename T>
struct ref_if_large {
using val =
ref_if_true< T, ((sizeof(T)) > (12U))>::V;
};

编译器提示 V 没有被定义,但老实说我不明白为什么。

最佳答案

在最后一个定义中添加 typename对于依赖类型,像这样:using val = typename ref_if_true<blah>::V; .但严重的是,不要为 max 函数执行此操作。别名问题已经够多了,不要再增加是否会出现别名的不确定性。


Boost 库的 boost::call_traits<T>::param_type 已经做了“最佳参数类型”的事情。

如果想避免对 Boost 的依赖,那么再次发明它当然是有意义的(我自己做过)。

但是,至少了解 Boost 功能是很有用的。

关于c++ - 如果类型的大小大于 X,如何实现接受类型并计算引用的类型特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350826/

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