gpt4 book ai didi

c++ - 为模板化类型专门化模板化函数?

转载 作者:行者123 更新时间:2023-11-27 23:48:34 25 4
gpt4 key购买 nike

我有一个函数:

// declaration of random, specialize this to provide random instances of types
template <typename T> T random() {
static_assert(
std::is_void<T>::value && false, "random() not implemented for type"
);
}

我想将它专门用于另一种类型,_point1d,它也是模板化的:

template <typename T>
struct _point1d {
_point1d(T x) : x(x) {}
T x;
};

我试过这个:

template <typename T>
_point1d<T> random<_point1d<T>>() { return _point1d<T>(random<T>()); }

但是我得到:

error: non-type partial specialization ‘random<_point1d<T> >’ is not allowed

用海合会。这可能吗?

最佳答案

您不能部分特化函数模板。

标准解决方案是使用中间帮助类模板:

template <typename> struct Aux;

template <typename U> struct Aux<_point1d<U>>
{
static _point1d<U> f() { /* ... */ }
};

template <typename T> T random() { return Aux<T>::f(); }
// ^^^^^^^^^^^^^^^^^^^

这样一来,您只有一个函数模板,选择正确特化的所有细节都在类模板中完成,您可以根据自己的选择自由地部分特化或显式特化。

关于c++ - 为模板化类型专门化模板化函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48573701/

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